[TIL] python #4
データプリプロセッシング
カラム名とインデックス名の変更
df1 = pd.read_csv('data/grade.csv', encoding = 'euc-kr')
#전체 변경
#원본 데이터 프레임의 컬럼과 이름과 인덱스를 변경
#원본을 유지하고 싶다면 ... 데이터 프레임을 복제(copy)
df2 = df1.copy()
df2.columns = ['값1', '값2', '값3', '값4', '값5', '값6', '값7']
df2.index = ['사람1', '사람2', '사람3', '사람4', '사람5']
#데이터 일부만 변경
df3 = pd.read_csv('data/grade.csv', encoding = 'euc-kr')
a1 = {
'국어' : 'kor',
'영어' : 'eng'
}
a2 = {
1 : '값2',
2 : '값3'
}
#inplace : True가 설정되면 원본 자체를 변경. 기본값은 False
df4 = df3.rename(columns=a1, index=a2)
df3.rename(columns=a1, index=a2, inplace=True)
特定のカラムを指定し、インデックスに設定します。
df1 = pd.read_csv('data/grade.csv', encoding = 'euc-kr')
#전체 변경
#원본 데이터 프레임의 컬럼과 이름과 인덱스를 변경
#원본을 유지하고 싶다면 ... 데이터 프레임을 복제(copy)
df2 = df1.copy()
df2.columns = ['값1', '값2', '값3', '값4', '값5', '값6', '값7']
df2.index = ['사람1', '사람2', '사람3', '사람4', '사람5']
#데이터 일부만 변경
df3 = pd.read_csv('data/grade.csv', encoding = 'euc-kr')
a1 = {
'국어' : 'kor',
'영어' : 'eng'
}
a2 = {
1 : '값2',
2 : '값3'
}
#inplace : True가 설정되면 원본 자체를 변경. 기본값은 False
df4 = df3.rename(columns=a1, index=a2)
df3.rename(columns=a1, index=a2, inplace=True)
df1 = pd.read_csv('data/grade.csv', encoding='euc-kr')
df1.set_index('이름', inplace=True)
データの取得
df1 = pd.read_csv('data/grade.csv', encoding='euc-kr')
df1.set_index('이름', inplace=True)
df1[[True, False, True, False, True]]
#True, False 가 들어가면 행을 가져오게 된다.
a1 = df1[df1['국어'] > 90]
#query: 데이터 프레임에서 조건을 만족하는 행만 가져와라.
a2 = df1.query('국어 > 90')
a3 = df1.query('국어 > 80 and 국어 < 100')
a4 = df1.query('국어 < 80 or 국어 > 100')
追加、削除
df1 = pd.read_csv('data/grade.csv', encoding='euc-kr')
df1.set_index('이름', inplace=True)
#특정 값 하나를 변경한다
#철수 행의 국어 열의 값을 2000으로 변경한다.
df1.loc['철수', '국어'] = 2000
#세번째 열, 네번째 컬럼의 값을 3000으로 변경한다.
df1.iloc[2, 3] = 3000
#일부를 발췌한다
a3 = df1.loc['영희' : '수현', '국어' : '수학']
#두번째 ~ 네번째 행, 두번째 ~ 네번째 열
a4 = df1.iloc[1:4, 1:4]
追加
#없는 이름을 쓰면 추가가 된다
#행추가
df1.loc['길동'] = [5, '여자', 50, 51, 52, 53]
#열추가
df1['한국사'] = [50, 51, 52, 53, 54, 55]
#열을 추가할 때는 모든 컬럼의 값이 다 들어가 있어야한다.
削除
#행삭제
df1.drop('길동', inplace=True)
#열삭제
df1.drop('한국사', inplace=True)
# ↑ 한국사라는 행을 삭제하는 명령어라서 에러남
#axis : 삭제대상 (0: 행삭제, 1:열삭제)
df1.drop('한국사', inplace=True, axis = 1)
データフレームのマージ
df1 = pd.read_csv('data/grade.csv', encoding='euc-kr')
df2 = df1[['이름', '학년', '성별']]
df3 = df1[['이름', '국어', '영어']]
df3 = df3.reindex(index=[4, 0, 3, 1, 2]
df3.index = [0, 1, 2, 3, 4
#concat은 인덱스가 같은 것 끼리 합쳐진다.
df10 = pd.concat([df2, df3], axis = 1)
#axis = 1 -> 세로 방향으로 합친다. 가로 방향으로 합친다. 합치는 방향이 세로라는 의미
#merge : 두 데이터 프레임의 컬럼을 지정한다. 지정된 컬럼의 값이 같은 것끼리 합쳐진다
#left_on : 좌측 데이터프레임의 컬럼 이름, right_on : 우측 데이터 프레임의 컬럼 이름
df20 = pd.merge([df2, df3, left_on='이름', right_on='이름')
異常値欠落測定値処理
実測値
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df1 = pd.read_csv('data/grade.csv', encoding='euc-kr')
#결측치를 확인한다.
df1.isna().sum()
#결측치가 있는 로우를 제거한다.
df2 = df1.copy()
df2.dropna(inplca=True)
#결측치가 있는 컬럼을 제거한다.
df3 = df1.copy()
df3.dropna(inplace=True, axis=1)
#결측치 존재 여부를 검사할 컬럼을 지정하여 삭제한다.
df4 = df1.copy()
df4.dropna(inplac=True, subset=['수학', '과학'])
#결측치 존재 여부를 검사할 인덱스를 지정하여 삭제한다.
df5 = df1.copy()
df5.dropna(inplace=True, subset=[2,3,4], axis=1)
#모든 컬럼의 데이터가 결측치로 되어 있는 로우만 골라 제거한다.
df6 = df1.copy()
df6.loc[5] = [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]
df6.dropna(inplace=True, how='all')
#결측치 부분을 특정값으로 셋팅해준다.
#모든 컬럼, 모든 행의 결측치를 동일한 값으로 채워준다.
df7 = df1.copy()
df7.fillna(value=50, inplace=True)
#각 컬럼별로 결측에 채워줄 값을 지정한다.
df8 = df1.copy()
df8['영어'].fillna(value=1000, inplace=True)
df8['수학'].fillna(value=2000, inplace=True)
df8['과학'].fillna(value=3000, inplace=True)
例外値
df1 = pd.read_csv('data/grade.csv', encoding='euc-kr')
#이상치 확인 - 범위형 데이터
df1[['국어', '영어', '수학', '과학']].describe()
#이상치 확인 - 레이블 데이터
display(df1['이름'].value_counts().index)
display(df1['학년'].value_counts().index)
display(df1['성별'].value_counts().index)
#이상치 확인 - 극단치 존재 여부 확인
#파란 네모 : 데부분의 데이터가 모여 있는 곳
#초록색 선 : 평균의 위치
#검은 선 : 통계적으로 봤을 때 정상 범위라고 생각되는 부분
#동그라미 : 극단치
df1[['국어', '영어', '수학', '과학']].boxplot()
plt.show
#폰트 설정
plt.rcParams['font.family'] = 'Malgun Gothic'
#plt.rcParams['font.family'] = 'AppleGothic'
#그래프 크기 설정
plt.rcParams['figure.figsize'] = (20, 10)
#글자 설정
plt.rcParams['font.size']=16
#이상치를 가지고 있는 데이터를 추출한다. (90보다 크면 이상치라고 가정한다.)
df1 = pd.read_csv('data/grade.csv', encoding='euc-kr')
df1.set_index('이름', inplace=True)
a1 = df1.query('국어 > 90').index
df1.drop(a1, inplace=True)
#이상치 대체
df1 = pd.read_csv('data/grade.csv', encoding='euc-kr')
df1.set_index('이름', inplace=True)
a1 = df1.query('국어 > 90').index
df4.loc[a1, '국어'] = 0
DataFrameの可視化
Python用の代表的なビジュアル化ライブラリ
Reference
この問題について([TIL] python #4), 我々は、より多くの情報をここで見つけました https://velog.io/@yeon2zzang/TIL-python-4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol