03-5
시리즈와 데이터프레임의 데이터 처리하기¶
지금까지는 시리즈와 데이터프레임에서 데이터를 추출하는 여러 방법에 대해 알아보았다. 이번에는 시리즈와 데이터프레임에 있는 데이터를 처리하는 방법에 대해 알아보겠다.
In [3]:
# 데이터 불러오기
import pandas as pd
scientists = pd.read_csv('doit_pandas_data/data/scientists.csv')
In [4]:
print(scientists['Born'].dtype)
object
In [7]:
print(scientists['Died'].dtype)
object
- 날짜를 문자열로 저장한 데이터는 시간 관련 작업을 할 수 있도록 datetime 자료형으로 바꾸는 것이 더 좋다. 다음은 Born과 Died 열의 자료형을 datetime이라는 자료형으로 바꾼 다음 format 속성을 '%Y-%m-%d'로 지정하여 날짜 형식을 지정한 것이다.
In [11]:
born_datetime = pd.to_datetime(scientists['Born'], format='%Y-%m-%d')
print(born_datetime)
0 1920-07-25 1 1876-06-13 2 1820-05-12 3 1867-11-07 4 1907-05-27 5 1813-03-15 6 1912-06-23 7 1777-04-30 Name: Born, dtype: datetime64[ns]
In [12]:
died_datetime = pd.to_datetime(scientists['Died'], format='%Y-%m-%d')
print(died_datetime)
0 1958-04-16 1 1937-10-16 2 1910-08-13 3 1934-07-04 4 1964-04-14 5 1858-06-16 6 1954-06-07 7 1855-02-23 Name: Died, dtype: datetime64[ns]
- 과정 2에서 각 데이터의 자료형을 datetime으로 바꿔 born_datetime, died_datetime에 저장했으니 이제 데이터프레임에 각각 값을 새로운 열로 추가해 보겠다. 다음은 scientists 데이터프레임 born_dt, died_dt 열을 추가한 것이다. shape 속성으로 데이터프레임의 형태를 살펴보면 (8, 5)에서 (8, 7)로 2개의 열이 추가되었다는 것을 알 수 있다.
In [16]:
scientists['born_dt'], scientists['died_dt'] = (born_datetime, died_datetime)
print(scientists.head())
Name Born Died Age Occupation born_dt \ 0 Rosaline Franklin 1920-07-25 1958-04-16 37 Chemist 1920-07-25 1 William Gosset 1876-06-13 1937-10-16 61 Statistician 1876-06-13 2 Florence Nightingale 1820-05-12 1910-08-13 90 Nurse 1820-05-12 3 Marie Curie 1867-11-07 1934-07-04 66 Chemist 1867-11-07 4 Rachel Carson 1907-05-27 1964-04-14 56 Biologist 1907-05-27 died_dt 0 1958-04-16 1 1937-10-16 2 1910-08-13 3 1934-07-04 4 1964-04-14
In [15]:
print(scientists.shape)
(8, 7)
- 이제 시간을 계산해보자. died_dt 열에서 born_dt를 빼면 과학자가 얼마 동안 세상을 살다가 떠났는지 계산할 수 있다. 만약 결괏값이 제대로 출력되지 않는다면 과정 1~3을 다시 실행해 보자.
In [20]:
scientists['age_days_dt'] = (scientists['died_dt'] - scientists['born_dt'])
print(scientists)
Name Born Died Age Occupation \ 0 Rosaline Franklin 1920-07-25 1958-04-16 37 Chemist 1 William Gosset 1876-06-13 1937-10-16 61 Statistician 2 Florence Nightingale 1820-05-12 1910-08-13 90 Nurse 3 Marie Curie 1867-11-07 1934-07-04 66 Chemist 4 Rachel Carson 1907-05-27 1964-04-14 56 Biologist 5 John Snow 1813-03-15 1858-06-16 45 Physician 6 Alan Turing 1912-06-23 1954-06-07 41 Computer Scientist 7 Johann Gauss 1777-04-30 1855-02-23 77 Mathematician born_dt died_dt age_days_dt 0 1920-07-25 1958-04-16 13779 days 1 1876-06-13 1937-10-16 22404 days 2 1820-05-12 1910-08-13 32964 days 3 1867-11-07 1934-07-04 24345 days 4 1907-05-27 1964-04-14 20777 days 5 1813-03-15 1858-06-16 16529 days 6 1912-06-23 1954-06-07 15324 days 7 1777-04-30 1855-02-23 28422 days
5. 시리즈, 데이터프레임의 데이터 섞기¶
가끔은 데이터를 적당히 섞어야 하는 경우도 있다. 판다스는 시리즈나 데이터프레임의 데이터를 무작위로 섞어볼 수도 있다. 먼저 Age 값을 출력하여 살펴보겠다.
In [29]:
print(scientists['Age'])
0 90 1 66 2 61 3 41 4 77 5 45 6 56 7 37 Name: Age, dtype: int64
- age 열의 데이터를 섞으려면 random 라이브러리를 불러와야 한다. random 라이브러리에는 데이터를 섞어주는 shuffle 메서드가 있다. shuffle 메서드에 Age 열을 전달하여 데이터를 섞어보겠다. Age 열을 출력해 보면 인덱스 0~7에 해당하는 값이 잘 섞여 있음을 알 수 있다.
In [30]:
import random
random.seed(42)
random.shuffle(scientists['Age'])
print(scientists['Age'])
0 41 1 77 2 56 3 37 4 61 5 45 6 90 7 66 Name: Age, dtype: int64
7. 데이터프레임의 열 삭제하기¶
때로는 열을 통째로 삭제해야 하는 경우도 있다. 먼저 scientists 데이터프레임의 열을 확인해 보겠다.
In [31]:
print(scientists.columns)
Index(['Name', 'Born', 'Died', 'Age', 'Occupation', 'born_dt', 'died_dt', 'age_days_dt'], dtype='object')
- 데이터프레임에서 열을 삭제하려면 데이터프레임의 drop 메서드를 사용해야 합니다. shuffle 메서드로 섞은 Age 열을 삭제해 보겠다. drop 메서드의 첫 번째 인자에 열 이름을 리스트에 담아 전달하고 두 번째 인자에는 axis = 1을 전달하면 Age 열을 삭제할 수 있다. (drop 메서드는 삭제한 열을 반환한다.)
In [33]:
scientists_dropped = scientists.drop(['Age'], axis=1)
print(scientists_dropped.columns)
Index(['Name', 'Born', 'Died', 'Occupation', 'born_dt', 'died_dt', 'age_days_dt'], dtype='object')
출처 : Do it! 데이터 분석을 위한 판다스
'Python > Pandas' 카테고리의 다른 글
<파이썬 판다스> Chapter 04-1 데이터 시각화가 필요한 이유 (0) | 2023.04.29 |
---|---|
<파이썬 판다스> Chapter 03-6 데이터 저장하고 불러오기 (0) | 2023.04.28 |
<파이썬 판다스> Chapter 03-4 데이터프레임 다루기 (0) | 2023.04.28 |
<파이썬 판다스> Chapter 03-3 시리즈 다루기 - 응용 (0) | 2023.04.28 |
<파이썬 판다스> Chapter 03-2 시리즈 다루기 - 기초 (0) | 2023.04.28 |