반응형
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]:
퀴즈 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]:
In [189]:
Out[189]:
In [190]:
Out[190]:
In [191]:
Out[191]:
In [ ]:
반응형