pandas로 csv 읽기
import pandas as pd
df = pd.read_csv('C:/Users/student/Desktop/python/P_data/ch9/test.csv')
print(df)
앞, 뒤 데이터 잘라 사용하기
import pandas as pd
df = pd.read_csv('C:/Users/student/Desktop/python/P_data/ch9/test.csv')
print('상위 데이터만 출력')
print(df.head())
print('하위 데이터만 출력')
print(df.tail())
슬라이싱 하기
print(df[0:3]) # row 기준 자료 출력
print(df[0:2])
print(df[0:1])
iloc 슬라이싱
예전에는 df.ix -> 업데이트 후엔 df.iloc[[행],[열]]
print(df.iloc[1:4, :0]) # error
print(df.iloc[1:4, :1])
print(df.iloc[1:4, :2])
print(df.iloc[1:4, :3])
print(df.iloc[1:4, :4])
print(df.iloc[:, 1])
print(df.iloc[1, 1])
print(df.iloc[1, 2])
print(df['나이'])
print(df['이름'])
print(df['주소'])
데이터 재조합
name = df['이름']
age = df['나이']
print(name)
print(age)
print('axis 가 1일때 - 칼럼 단위 합치기')
p1 = pd.concat([name,age],axis=1)
print(p1)
print('axis 가 0일때 - 로우 단위 합치기')
p2 = pd.concat([name,age],axis=0)
print(p2)
filtering
print(df['나이']>30) # true or false 출력
print(df[df['나이']>30]) # 값 출력
print(df['나이'].notnull())
print(df[df['나이'].notnull()])
print(df['나이'] == '') # 에러 칼럼 전체 비교 elementwise comparison failed 나온다
print(df['나이'] == '1') # 에러 칼럼 전체 비교 elementwise comparison failed 나온다
print(df['나이'] == 1) # ok
print(df['이름'] == 1) # ok
* data frame
컬럼은 딕셔너리, 로우는 각 키에 저장되는 리스트
from pandas import DataFrame
raw_data = {'이름': ['철구1', '맹구2', '짱구3', '유리4', '철구5', '맹구6', '짱구7', '유리8',],
'나이': [20, 21, 20, 12, 30, 31, 40, 30],
'주소': ['경기도', '강원도', '경상도', '전라도', '경기도', '강원도', '경상도', '전라도', ]}
data = DataFrame(raw_data)
print(data)
index, column 지정
data = DataFrame(raw_data,columns=['나이','주소'],index=raw_data['주소'])
print(data)
data1 = DataFrame(raw_data,columns=['나이'],index=raw_data['주소'])
print(data1)
print(data1['강원도']) # 키에러
print(data1[data1.iloc['강원도']]) # 키 인것 가져오기 error
print(data1.loc['강원도']) # 키 인것 가져오기 ok - row data 가져옴
print(data1.loc['경상도']) # 키 인것 가져오기 ok - row data 가져옴
print(data1[data1['나이'] == 20]) # 키가 아닌것 가져 오기 ok
type(data1)
저장하기
from pandas import DataFrame
data = {
'이름': ['철구1', '맹구2', '짱구3', '유리4', '철구5', '맹구6', '짱구7', '유리8'],
'나이': [20, 21, 20, 12, 30, 31, 40, 30],
'주소': ['경기도', '강원도', '경상도', '전라도', '경기도', '강원도', '경상도', '전라도']
}
df = DataFrame(data, columns=['나이', '주소', '이름'])
df.to_csv('9.41.csv',encoding='euc-kr')
pandas 기초 익히기
import pandas as pd
import numpy as np
## pandas의 데이터 유형 중 기초 : Series
s = pd.Series([1,3,5,np.nan,6,8])
s
## pandas 데이터 중 날짜형 데이터 : data_range
dates = pd.date_range('20200824',periods=6)
dates
## DataFrame 유형의 데이터 만들기
df = pd.DataFrame(np.random.randn(6,4), #6행 4열의 random 변수 생성
index = dates, #위에서 만든 날짜형 데이터를 값으로 받음
columns=['a','b','c','d']) # 열 제목 지정
df
df.head(3)
df.info()
df.index
df.columns
df.describe() # 통계적 개요 확인
df.sort_values(by='b', ascending=False) # b column에만 적용되며 raw data에 저장되는 사항은 아님
df['a']
# 슬라이싱 옵션
# 1. loc(location):위치값을 조정->열 데이터 기준
# 2. iloc:행과 열의 번호를 이용하여 특정 데이터에 접근
df.loc[dates[0],'a']
df.iloc[0,0]
# 같은 값을 loc,iloc로 각각 인덱싱함.
df[df.a>0] # a열 중에서 0보다 큰 index만 나타내기
df[df>0] # 전체 값이 0보다 큰지 비교
# copy dataframe
df2 = df.copy()
df2
df2['e'] = ['one','two','three','four','five','six']
df2
# 조건을 거는 isin 명령어
df2['e'].isin(['two','four']) # 논리값 반환
df2[df2['e'].isin(['two','four'])] # 조건을 만족하는 True행의 값 반환
# apply 함수 적용
df.apply(np.cumsum) # 누적합
df.apply(lambda x: x.max() - x.min()) # 최대값과 최소값 사이의 차이를 계산
#lambda 함수: 한 줄에 조건문을 선언
pandas 고급 기능 - 두 DataFrame 병합하기
df1 = pd.DataFrame({'A' : ['A0', 'A1', 'A2', 'A3'],
'B' : ['B0', 'B1', 'B2', 'B3'],
'C' : ['C0', 'C1', 'C2', 'C3'],
'D' : ['D0', 'D1', 'D2', 'D3']},
index = [0,1,2,3])
df2 = pd.DataFrame({'A' : ['A4', 'A5', 'A6', 'A7'],
'B' : ['B4', 'B5', 'B6', 'B7'],
'C' : ['C4', 'C5', 'C6', 'C7'],
'D' : ['D4', 'D5', 'D6', 'D7']},
index = [4,5,6,7])
df3 = pd.DataFrame({'A' : ['A8', 'A9', 'A10', 'A11'],
'B' : ['B8', 'B9', 'B10', 'B11'],
'C' : ['C8', 'C9', 'C10', 'C11'],
'D' : ['D8', 'D9', 'D10', 'D11']},
index = [8,9,10,11])
# 열 방향으로 단순 합치기 : concat
result = pd.concat([df1, df2, df3])
result
result = pd.concat([df1, df2, df3], keys = ['x', 'y', 'z'])
result
result.index
result.index.get_level_values(0)
result.index.get_level_values(1)
result.index.get_level_values(3)
df1
df4 = pd.DataFrame({'B' : ['B2', 'B3', 'B6', 'A7'],
'D' : ['D2', 'D3', 'D6', 'D7'],
'F' : ['F2', 'F3', 'F6', 'F7']},
index = [2,3,6,7])
# 행 방향으로 합치기 : concat( 옵션 : axis = 1)
result = pd.concat([df1, df4], axis = 1)
result
# 공통된 index로 합치기
result = pd.concat([df1, df4], axis = 1, join = 'inner')
result
# 열 방향으로 합치면서 두 데이터의 index 무시하고 새로 index 부여
result = pd.concat([df1, df4], ignore_index = True)
result
left = pd.DataFrame({'key' : ['Ko', 'K4', 'K2', 'K3'],
'A' : ['A0', 'A1', 'A2', 'A3'],
'B' : ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key' : ['Ko', 'K1', 'K2', 'K3'],
'C' : ['C0', 'C1', 'C2', 'C3'],
'D' : ['D0', 'D1', 'D2', 'D3']})
# merge : 합치기
pd.merge(left, right, on = 'key') # 공통된 key
pd.merge(left, right, how = 'left', on = 'key') # left 데이터의 key 기준
pd.merge(left, right, how = 'right', on = 'key') # right 데이터의 key 기준
pd.merge(left, right, how = 'outer', on = 'key') # 모든 key 값 (합집합)
pd.merge(left, right, how = 'inner', on = 'key') # 공통된 key 값 (교집합)