NumPy를 기반으로 설계된 구조화된 데이터를 처리하고 저장하는 라이브러리
import pandas as pd
# 기본형(0,1,2,...) 아닌 지정된 인덱스를 사용할 수도 있다.
# name 속성으로 title을 지정할 수도 있다.
data = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'] name='title1')
# 딕셔너리를 Series로 사용할 수 있다.
population_dict = {
'korea': 5180,
'japan': 12718,
'china': 141500,
'usa': 32676
}
population = pd.Series(population_dict)
A = pd.Series([2, 4, 6], index=[0, 1, 2])
B = pd.Series([1, 3, 5], index=[1, 2, 3])
A + B
A.add(B, fill_value=0)
index에 맞춰서 연산된다.
population = pd.Series(population_dict)
gdp = pd.Series(gdp_dict)
country = pd.DataFrame({
'population': population,
'gdp': gdp
gdp_per_capita = country['gdp'] / country['population’]
country['gdp per capita’] = gdp_per_capita
# 저장
country.to_csv(“./country.csv”)
country.to_excel(“country.xlsx”)
# 불러오기
country = pd.read_csv(“./country.csv”)
country = pd.read_excel(“country.xlsx”)
# 명시적 인덱스 참조
country.loc['china']
country.loc['japan':'korea', :'population']
# 정수 인덱스 참조
country.iloc[0]
country.iloc[1:3, :2]
dataframe = pd.DataFrame(colums=['name', 'age', 'address']
dataframe.loc[0] = ['김범진', '27', '서울']
dataframe.loc[1] = ['name': '이혜영', 'age': '26', 'address': '제주']
dataframe.loc[1, '이름'] = '혜일'
#새로운 컬럼 추가
dataframe[‘contact'] = np.nan
dataframe.loc[0, ‘contact’] = ‘01012341234’
dataframe["name"]
dataframe[["name","address","age"]]
dataframe.isnull() # null인 값을 True로, null이 아닌 값을 False로 채워진 dataframe 반환
누락된 데이터가 있는 경우 해당 열을 삭제하거나, 빈곳을 default값으로 채우는 방식을 사용할 수 있다.
dataframe.dropna()
dataframe['contact'] = dataframe['contact'].fillna('no phone number')
A = pd.DataFrame(np.random.randint(0, 10, (2, 2)), columns=list("AB"))
B = pd.DataFrame(np.random.randint(0, 10, (3, 3)), columns=list("BAC"))
A + B
A.add(B, fill_value=0)
index와 컬럼에 맞춰서 연산된다.
data = {
'A': [ i+5 for i in range(3) ],
'B': [ i**2 for i in range(3) ]
}
df = pd.DataFrame(data)
df['A'].sum() # 18
df.sum()
df.mean()
df = pd.DataFrame({
'col1' : [2, 1, 9, 8, 7, 4],
'col2' : ['A', 'A', 'B', np.nan, 'D', 'C'],
'col3': [0, 1, 9, 4, 2, 3],
})
df.sort_values('col1', ascending=False) # 기본값은 오름차순 정렬
df.sort_values(['col2', 'col1']) # col2에 대해서 정렬하고 동일한 값은 col1에 의해 정렬
df = pd.DataFrame(np.random.rand(5, 2), columns=["A", "B"])
df[“A”] < 0.5 # True, False값을 가지는 dataframe
df[(df["A"] < 0.5) & (df["B"] > 0.3)]
df.query("A < 0.5 and B > 0.3") # query를 이용해서도 조건 검색 가능
# 문자열 조건 검색
df["Animal"].str.contains("Cat")
df.Animal.str.match("Cat")
apply를 통해서 함수로 데이터를 다룰 수 있다.
df = pd.DataFrame(np.arange(5), columns=["Num"])
df["Square"] = df.Num.apply(lambda x: x ** 2)
df.Sex.replace({"Male": 0, "Female": 1}, inplace=True)
df.groupby('key')
df.groupby('key').sum()
df.groupby(['key','data1']).sum()
그룹으로 묶은 다음 집계함수를 사용할 수도 있다.
df.groupby('key').aggregate(['min', np.median, max])
df.groupby('key').aggregate({'data1': 'min', 'data2': np.sum})
aggregate를 사용하면 집계를 한번에 계산할 수 있다.
def filter_by_mean(x):
return x['data2'].mean() > 3
df.groupby('key').filter(filter_by_mean)
그룹 속성을 기준으로 데이터 필터링을 사용할 수 있다.
df.groupby('key').apply(lambda x: x.max() - x.min())
그룹을 통해 묶인 데이터에 함수를 적용할 수 있다.
df.groupby('시도').get_group('경기')
그룹으로 묶인 데이터에서 키값으로 데이터를 추출할 수 있다.
df = pd.DataFrame(
np.random.randn(4, 2),
index=[['A', 'A', 'B', 'B'], [1, 2, 1, 2]], # 계층적 인덱스
columns=['data1', 'data2']
)
df = pd.DataFrame(
np.random.randn(4, 4),
columns=[["A", "A", "B", "B"], ["1", "2", "1", "2"]] # 계층적 열 인덱스
)
필요한 자료만 뽑아서 새롭게 요약
df.pivot_table(
index="월별", columns='내역', values=["수입", '지출'])