320x100
### 일단은 titanic raw 데이터 정리!!
import pandas as pd
titanic = pd.read_csv('titanic_imp.csv')
titanic.Survived.unique()
# array(['0', '1', 'yes', 'no'], dtype=object)
여기서부터 to_csv로 정리된걸 안쏴줬구나.. 라는것을 깨닫고 처음부터 다시 시작했다.
titanic.Survived.replace(['yes', 'no'], [1,0], inplace = True)
titanic.Survived.unique()
# array(['0', '1', 1, 0], dtype=object)
titanic.Survived = titanic.Survived.astype(int)
titanic.info()
'''
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 894 entries, 0 to 893
Data columns (total 9 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Survived 894 non-null int64
1 Class 894 non-null int64
2 Gender 894 non-null object
3 Age 758 non-null object
4 Sipsp 894 non-null int64
5 Parch 894 non-null int64
6 Fare 894 non-null object
7 Emb 892 non-null object
8 Deck 203 non-null object
dtypes: int64(4), object(5)
memory usage: 63.0+ KB
'''
# string은 데이터 타입 변환이 안된다고 했는데
# Missing Data를 ''로 바꾸어 주었고
# 그것도 string이라서 전환이 안된다길래 이렇게 NaN값으로 바꾸어 주었더니 작동 되었다.
titanic.Age = titanic.Age.replace('Missing Data', 'NaN')
titanic.Age = titanic.Age.astype('float')
titanic.head(3)
'''
Survived Class Gender Age Sipsp Parch Fare Emb Deck
0 0 3 male 22.0 1 0 $7.25 S NaN
1 1 1 female 38.0 1 0 $71.2833 C C
2 1 3 female 26.0 0 0 $7.925 S NaN
'''
titanic.Fare = titanic.Fare.replace('$', '', inplace = True)
titanic.head()
'''
Survived Class Gender Age Sipsp Parch Fare Emb Deck
0 0 3 male 22.0 1 0 None S NaN
1 1 1 female 38.0 1 0 None C C
2 1 3 female 26.0 0 0 None S NaN
3 1 1 female 35.0 1 0 None S C
4 0 3 male 35.0 0 0 None S NaN
'''
# 음.. 달러만 빼주려고 했던건데 아예 값이 날라가 버렸다.
# 리셋 후 다시 시작!
titanic.head()
'''
Survived Class Gender Age Sipsp Parch Fare Emb Deck
0 0 3 male 22.0 1 0 7.25 S NaN
1 1 1 female 38.0 1 0 71.2833 C C
2 1 3 female 26.0 0 0 7.925 S NaN
3 1 1 female 35.0 1 0 53.1 S C
4 0 3 male 35.0 0 0 8.05 S NaN
'''
# 기존에 titanic.Fare = titanic.Fare.replace('$', '', inplace = True) 라고 해주었을대 아예 Fare컬럼의 값이 모두 날라갔다.
# 이를 방지하기 위해서
# titanic.Fare = titanic.Fare.str.replace('$', '')
# 이렇게 해주었더니 정상 작동 된다.
# str에 대한 정확한 원리는 모르겠다. 뭐 당연히 string 뭐 그런거겠지만, 잘은 모르겠다.
titanic.info()
'''
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 894 entries, 0 to 893
Data columns (total 9 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Survived 894 non-null int64
1 Class 894 non-null int64
2 Gender 894 non-null object
3 Age 717 non-null float64
4 Sipsp 894 non-null int64
5 Parch 894 non-null int64
6 Fare 894 non-null object
7 Emb 892 non-null object
8 Deck 203 non-null object
dtypes: float64(1), int64(4), object(4)
memory usage: 63.0+ KB
'''
titanic.Fare = titanic.Fare.astype('float')
titanic.info()
'''
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 894 entries, 0 to 893
Data columns (total 9 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Survived 894 non-null int64
1 Class 894 non-null int64
2 Gender 894 non-null object
3 Age 717 non-null float64
4 Sipsp 894 non-null int64
5 Parch 894 non-null int64
6 Fare 894 non-null float64
7 Emb 892 non-null object
8 Deck 203 non-null object
dtypes: float64(2), int64(4), object(3)
memory usage: 63.0+ KB
'''
titanic.to_csv('titanic_imp.csv', index = False)
pd.read_csv('titanic_imp.csv')
'''
Survived Class Gender Age Sipsp Parch Fare Emb Deck
0 0 3 male 22.0 1 0 7.2500 S NaN
1 1 1 female 38.0 1 0 71.2833 C C
2 1 3 female 26.0 0 0 7.9250 S NaN
3 1 1 female 35.0 1 0 53.1000 S C
4 0 3 male 35.0 0 0 8.0500 S NaN
... ... ... ... ... ... ... ... ... ...
889 1 1 male 26.0 0 0 30.0000 C C
890 0 3 male 32.0 0 0 7.7500 Q NaN
891 0 2 male 24.0 0 0 10.5000 S NaN
892 0 3 male 34.0 1 1 14.4000 S NaN
893 0 3 male 36.0 0 0 7.8958 S NaN
894 rows × 9 columns
'''
### 다음으로는 summer raw데이터 정리!!!
summer = pd.read_csv('summer_imp.csv')
summer.head()
'''
Year City Sport Discipline Athlete Name Country Gender Event Medal
0 1896 Athens Aquatics Swimming HAJOS, Alfred HUN Men 100M Freestyle Gold Medal
1 1896 Athens Aquatics Swimming HERSCHMANN, Otto AUT Men 100M Freestyle Silver
2 1896 Athens Aquatics Swimming DRIVAS, Dimitrios GRE Men 100M Freestyle For Sailors Bronze
3 1896 Athens Aquatics Swimming Malokinis, Ioannis GRE Men 100M Freestyle For Sailors Gold Medal
4 1896 Athens Aquatics Swimming Chasapis, Spiridon GRE Men 100M Freestyle For Sailors Silver
'''
# 우선 변경 포인트
# 1 Athlete Name의 컬럼을 Athlete_Name으로 변경
# 2 Athlete Name을 title화 하여, 문장의 앞만 대문자화 하기
# 3 Medal의 Gold Medal을 Gold로 변환
# 1 Athlete Name의 컬럼을 Athlete_Name으로 변경
# 기억이 안났었다. 그래서 블로그에 썼던 글을 확인했다.
# 컬럼 이름 변경 방법!!
# summer['Athlete Name'] = summer.Athlete_Name
summer.rename(columns = {'Athlete Name':'Athlete_Name'}, inplace = True)
# 변경 성공
# 2 Athlete Name을 title화 하여, 문장의 앞만 대문자화 하기
summer.Athlete_Name = summer.Athlete_Name.str.title()
summer.head()
'''
Year City Sport Discipline Athlete_Name Country Gender Event Medal
0 1896 Athens Aquatics Swimming Hajos, Alfred HUN Men 100M Freestyle Gold Medal
1 1896 Athens Aquatics Swimming Herschmann, Otto AUT Men 100M Freestyle Silver
2 1896 Athens Aquatics Swimming Drivas, Dimitrios GRE Men 100M Freestyle For Sailors Bronze
3 1896 Athens Aquatics Swimming Malokinis, Ioannis GRE Men 100M Freestyle For Sailors Gold Medal
4 1896 Athens Aquatics Swimming Chasapis, Spiridon GRE Men 100M Freestyle For Sailors Silver
'''
# 변경 완료
# 3 Medal의 Gold Medal을 Gold로 변환
summer.Medal = summer.Medal.str.replace('Gold Medal', 'Gold')
summer.head()
'''
Year City Sport Discipline Athlete_Name Country Gender Event Medal
0 1896 Athens Aquatics Swimming Hajos, Alfred HUN Men 100M Freestyle Gold
1 1896 Athens Aquatics Swimming Herschmann, Otto AUT Men 100M Freestyle Silver
2 1896 Athens Aquatics Swimming Drivas, Dimitrios GRE Men 100M Freestyle For Sailors Bronze
3 1896 Athens Aquatics Swimming Malokinis, Ioannis GRE Men 100M Freestyle For Sailors Gold
4 1896 Athens Aquatics Swimming Chasapis, Spiridon GRE Men 100M Freestyle For Sailors Silver
'''
# 성공
# 공백 확인
summer.iloc[0,4]
# ' Hajos, Alfred '
# 여전히 공백이 있으므로 strip()
summer.Athlete_Name = summer.Athlete_Name.str.strip()
summer.iloc[0,4]
# 'Hajos, Alfred'
# 공백제거 완료
# 잊어버렸지만 지금 해야하는 것
# 1 필드에 해당되는 값을 보는 방법
# 2 데이터의 유니크식의 속성 - 각각의 컬럼으로써 보는건 안다. 근데 전체적으로 훑는걸 까먹었다.
summer.value_counts()
# 1 필드에 해당되는 값을 보는 방법
summer.loc[summer.Athlete_Name == 'Hajos, Alfred']
'''
Year City Sport Discipline Athlete_Name Country Gender Event Medal
0 1896 Athens Aquatics Swimming Hajos, Alfred HUN Men 100M Freestyle Gold
6 1896 Athens Aquatics Swimming Hajos, Alfred HUN Men 1200M Freestyle Gold
'''
# 성공이지만
# SQL 처럼 정규표현으로 일부만 써줘도 호출해오는것도 있었던 것같은데?
# SQL의 정규표현식 처럼 일부분만 있어도 긁어오는 거 '%'처럼 - contains
summer.loc[summer.Athlete_Name.str.contains('Hajos')]
# 2 데이터의 유니크식의 속성 - 각각의 컬럼으로써 보는건 안다. 근데 전체적으로 훑는걸 까먹었다.
summer.iloc[:,:].describe()
'''
Year
count 31170.000000
mean 1970.483157
std 33.158454
min 1896.000000
25% 1948.000000
50% 1980.000000
75% 2000.000000
max 2012.000000
'''
# 위의 입력 값은 사실상 summer.describe()와 동일한데, 나는 이래서 원하는 답을 찾지 못했었다.
summer.iloc[:,1:].describe()
'''
City Sport Discipline Athlete_Name Country Gender Event Medal
count 31170 31170 31170 31170 31166 31170 31170 31170
unique 22 43 67 22761 147 2 666 3
top London Aquatics Athletics Phelps, Michael USA Men Football Gold
freq 3567 4170 3639 22 4586 22751 1497 10487
'''
summer.to_csv('summer_imp.csv', index = False)
pd.read_csv('summer_imp.csv')
휴... 크게 어렵진 않았지만 익숙해지고 또 익숙해져야겠다.
의도치는 않았지만, 이걸 혼자 하는 동안에 강의 하나분을 건너 뛰어버렸다;
300x250
'개발일지 > Pandas' 카테고리의 다른 글
pandas 판다스 틀린부분 복기 7 데이터 정리하기 (0) | 2022.08.01 |
---|---|
매우중요 pandas 판다스 기초 17 결측값(NaN), 중복값(duplicated) 활용 (0) | 2022.07.29 |
매우중요 pandas 판다스 기초 16 문자열 가공 Cleaning Data (0) | 2022.07.28 |
pandas 판다스 기초 15 Importing Data From Web Site (0) | 2022.07.28 |
Pandas importerror: lxml not found, please install it (0) | 2022.07.28 |