반응형
In [2]:
import numpy as np
import pandas as pd
행또는 열 별로 합 구하기¶
- df.sum(axis=0)
- df.sum(axis=1)
- df[컬럼명].sum(axis=0)
- df.loc[인덱스명].sum()
- skipna = False
결측치가 있는 데이타프레임 생성하기¶
In [3]:
data = [[1.4, np.nan],
[7.1, -4.5],
[np.nan, np.nan],
[0.75, -1.3]]
In [4]:
df = pd.DataFrame(data, columns=["one","two"], index=["a", "b", "c", "d"])
df
Out[4]:
In [6]:
df.sum()
Out[6]:
In [7]:
df.sum(axis=0)
Out[7]:
df.sum(axis=1) => 가로합 => 시리즈¶
In [41]:
df.sum(axis=1)
Out[41]:
In [7]:
df.sum(axis=0)
Out[7]:
In [11]:
# 특정 열 방향 합
df["one"].sum()
Out[11]:
In [12]:
# 특정 열 방향 합
df["two"].sum()
Out[12]:
In [ ]:
df
In [14]:
df.sum(axis=1)
Out[14]:
df.loc[인덱스명].sum()¶
In [16]:
# 특정 행 방향 합
df.loc["b"].sum()
Out[16]:
In [15]:
df.loc["d"].sum()
Out[15]:
열 방향으로 함수 적용시 NaN 은 건너뛰기¶
- 데이타프레임.sum(axis=0/1, skipna=False)
In [17]:
df
Out[17]:
In [18]:
df.sum(axis=1)
Out[18]:
In [52]:
#열 방향으로 함수 적용시 NaN 은 건너뛰기
df.sum(axis=1, skipna=False)
Out[52]:
In [19]:
df.sum(axis=0, skipna=False)
Out[19]:
mean(), min(), max() 이용하기¶
- 데이타프레임.mean(axis=0/1)
- 데이타프레임.min(axis=0/1)
- 데이타프레임.max(axis=0/1)
In [20]:
# 행 값 입력하기
data = [[1.4, np.nan],
[7.1, -4.5],
[np.nan, np.nan],
[0.75, -1.3]]
In [21]:
# 컬럼명과 행 인덱스 명 지정
df = pd.DataFrame(data, columns=["one","two"], index=["a", "b", "c", "d"])
df
Out[21]:
In [25]:
# 세로방향 평균 구하기
df.mean()
Out[25]:
In [24]:
# 세로방향 평균 구하기
df.mean(axis=0)
Out[24]:
In [26]:
# 가로방향의 평균 구하기
df.mean(axis=1)
Out[26]:
In [58]:
# 열의 최소값 구하기
df.min(axis=0)
Out[58]:
In [27]:
# 행의 최소값 구하기
df.min(axis=1)
Out[27]:
NaN 값을 최소값이나 평균값으로 대체하기¶
- 데이타프레임이름.fillna(value=최소값또는 평균값)
In [60]:
data = [[1.4, np.nan],
[7.1, -4.5],
[np.nan, np.nan],
[0.75, -1.3]]
In [28]:
# 컬럼명과 행 인덱스 명 지정
df = pd.DataFrame(data, columns=["one","two"], index=["a", "b", "c", "d"])
df
Out[28]:
In [31]:
# 열의 평균값으로 NaN 값 채우기 , inplace=True 원본에 적용
df.fillna(value=df.mean(axis=0) )
Out[31]:
In [35]:
# 열의 최소값으로 NaN 값 채우기
df.fillna(value=df.min(axis=0), inplace=True)
In [36]:
df
Out[36]:
데이타프레임 간의 사칙 연산¶
데이타프레임1 연산자(+, -, *, /) 데이타프레임2
데이타프레임1.add(데이타프레임2, fill_value=NaN일때대체값)
데이타프레임1.subtract(데이타프레임2, fill_value=NaN일때대체값)
데이타프레임1.multifly(데이타프레임2, fill_value=NaN일때대체값)
데이타프레임1.div(데이타프레임2, fill_value=NaN일때대체값)
In [40]:
df1 = pd.DataFrame(
np.arange(31,40).reshape(3,3),
columns=list("abc")) # ['a', 'b', 'c']
In [41]:
df2 = pd.DataFrame(
np.arange(1,17).reshape(4,4),
columns=list("abcd"))
In [42]:
df1 + df2
Out[42]:
In [43]:
df1 - df2
Out[43]:
In [44]:
df1 * df2
Out[44]:
In [45]:
df1 / df2
Out[45]:
In [100]:
df1
Out[100]:
In [101]:
df2
Out[101]:
NaN 값을 특정값으로 교체한 후 사칙연산하기¶
In [46]:
df1.add(df2, fill_value=0)
Out[46]:
In [47]:
df1.subtract(df2, fill_value=0)
Out[47]:
In [48]:
df1.multiply(df2,fill_value=1)
Out[48]:
In [49]:
df1.div(df2, fill_value=1)
Out[49]:
판다스에서 소숫점처리하기¶
기본값은 6자리
pd.options.display.float_format = '{:.소숫점자리수f}'.format
예) 소숫점 2번째자리까지 표시
pd.options.display.float_format = '{:.2f}'.format
In [51]:
pd.options.display.float_format = '{:.2f}'.format
In [52]:
df1.div(df2, fill_value=1)
Out[52]:
데이타프레임의 병합¶
- 두 데이터 프레임의 공통 컬럼이나 인덱스를 기준으로 두 개의 데이타프레임을 합친다.
- 이 때 기준이 되는 컬럼과 인덱스를 키(key)라고 한다.
- SQL의 조인(Join) 방식과 흡사
pd.merge(데이타프레임1, 데이타프레임2) : Inner Join
pd.merge(데이타프레임1, 데이타프레임2, how='outer/left/right')
특정 컬럼이 키가 되는 두개의 데이타프레임 생성¶
- 조건
: 컬럼명이 같아야한다.
: 중복되는 데이타값이 있어야 한다.
In [73]:
df1 = pd.DataFrame({
'고객번호': [1001, 1002, 1003, 1004, 1005, 1006, 1007],
'이름': ['둘리', '도우너', '또치', '길동', '희동', '마이콜', '영희']
}, columns=['고객번호', '이름'])
df1
Out[73]:
In [74]:
df2 = pd.DataFrame({
'고객번호': [1001, 1001, 1005, 1006, 1008, 1001],
'금액': [10000, 20000, 15000, 5000, 100000, 30000]
}, columns=['고객번호', '금액'])
df2
Out[74]:
inner join 방식으로 병합하기¶
공통 컬럼인 고객번호를 기준으로 데이터를 찾아서 합친다.
양쪽 데이터프레임에 모두 키가 존재하는 데이터만 보여준다
pd.merge(데이타프레임1, 데이타프레임2)
In [75]:
pd.merge(df1, df2)
Out[75]:
outer join 방식으로 병합하기¶
- 키 값이 한쪽에만 있어도 데이터를 보여준다.
- 없는 데이타값은 nan으로 표시된다.
pd.merge(데이타프레임1, 데이타프레임2, how='outer')
In [77]:
pd.merge(df1, df2, how='outer')
Out[77]:
In [148]:
pd.merge(df1, df2, how='left')
Out[148]:
In [150]:
pd.merge(df1, df2, how='right')
Out[150]:
In [86]:
df1 = pd.DataFrame({
'도시': ['서울', '서울', '서울', '부산', '부산'],
'연도': [2000, 2005, 2010, 2000, 2005],
'인구': [9853972, 9762546, 9631482, 3655437, 3512547]},
index=np.arange(51,56))
In [87]:
df2 = pd.DataFrame({
'비율1': [45.4, 55.6, 57.8, 34.6, 38.8],
'비율2': [45.3, 56.7, 72.1, 38.9, 66.8]},
index=np.arange(51,56))
In [165]:
pd.merge(df1, df2, left_index=True, right_index=True)
Out[165]:
In [ ]:
두 데이타프레임에서 공통 컬럼명이 있지만 데이터형이 다른 경우¶
on = '기준이되는컬럼명' 지정
In [88]:
df1 = pd.DataFrame({
'고객명': ['춘향', '춘향', '몽룡'],
'날짜': ['2018-01-01', '2018-01-02', '2018-01-01'],
'데이터': ['20000', '30000', '100000']})
In [89]:
df2 = pd.DataFrame({
'고객명': ['춘향', '몽룡'],
'데이터': ['여자', '남자']})
고객명을 기준컬럼으로 지정하면 데이타 컬럼은 같은 컬럼명이므로 _x, _y가 붙는다¶
In [170]:
pd.merge(df1, df2, on='고객명')
Out[170]:
같은 데이타형태이지만 기준 컬럼명이 서로 다른 경우¶
left_on='이름', right_on="성명"
In [92]:
dfSt1 = pd.DataFrame({
'이름': ['영희', '철수', '철수'],
'성적A': [1, 2, 3]})
In [93]:
dfSt2 = pd.DataFrame({
'성명': ['영희', '영희', '철수'],
'성적B': [4, 5, 6]})
In [94]:
dfSt3 = pd.merge(dfSt1, dfSt2, left_on='이름', right_on="성명")
dfSt3
Out[94]:
In [95]:
del dfSt3['성명']
In [96]:
dfSt3
Out[96]:
퀴즈 1¶
아래와 같이 학생별로 각 과목의 총합과 평균을 구한 후 평균 80점이 넘으면 'True'를 출력한다.
In [82]:
Out[82]:
In [ ]:
Answer¶
In [59]:
data = {'수학':[100, 85, 89, 90],
'영어':[80, 95, 88, 77],
'과학':[100, 77, 77, 100],
'국어':[100, 78, 78, 99 ],
'국사':[70, 87, 60, 79]}
df = pd.DataFrame(data, index=['김남준', '박지민', '민윤기', '김태형'])
df
Out[59]:
In [57]:
# 평균값을 구할 수 없다
# df['총합'] = df.sum(axis=1)
# df['평균'] = df.mean(axis=1)
# df['합격여부'] = df['평균'] > 80
# df
In [65]:
# 총합을 구하는 시리즈
s1 = df.sum(axis=1)
In [66]:
# 평균을 구하는 시리즈
s2 = df.mean(axis=1)
In [64]:
# 새로운 컬럼에 시리즈에서 구한 합과 평균 추가하기
df['총합'] = s1
df['평균'] = s2
df['합격여부'] = df['평균'] > 80
df
Out[64]:
퀴즈 2¶
`` 아래와 같은 구조로 population_A, population_B 데이타 프레임을 생성한다.
생성한 데이타프레임 2개를 전치행열로 변경한 후 병합한다.
전치행렬 문법 : 데이타프레임.T
population_A = pd.DataFrame( {'Nation':['중국','인도','미국'], 'Population':[1420047, 1368693, 329086], 'Percent':[18.54, 17.74, 4.28] })
population_B = pd.DataFrame( {'Nation':['일본','베트남','터키'], 'Population':[126856, 97426, 82959 ], 'Percent':[1.67, 1.26, 1.08] })
```
In [143]:
Out[143]:
Answer¶
In [ ]:
df1 = pd.DataFrame({
'구단명' : ['전북현대', 'FC서울', '울산현대', '포항스틸러스', '제주유나이티드'],
'우승횟수' : [4, 3, 2, 5, 0],
'감독' : ['최강희', '황선홍', '김도훈', '최순호', '조성환']
})
In [ ]:
df2 = pd.DataFrame({
'club' : ['전북현대', 'FC서울', '울산현대', '포항스틸러스', '제주유나이티드'],
'홈구장' : ['전주월드컵경기장', '서울월드컵경기장', '울산문수축구경기장', '포항스틸야드', '제주월드컵경기장'],
'수용인원' : [42477, 66704, 44102, 25000, 29791],
'소유주' : ['현대자동차', 'GS그룹', '현대중공업', '포항제철', 'SK에너지' ]
})
In [189]:
Out[189]:
In [190]:
Out[190]:
In [191]:
Out[191]:
In [ ]:
Answer¶
반응형