1. dict type object가 string type일 때 dict type 으로 변경
"""
Description:
'{'a','b','c'}' -> {'a','b','c'}
"""
from ast import literal_eval
series.map(lambda x: literal_eval(x))
2. 특정 문자열을 포함한 키 값을 찾고 싶을 때
"""
Description:
{'aaa':1, 'bbb':2, 'ccc':3} 에서 key값에 aaa를 포함한 키 값
"""
[k for k in dict.keys() if '문자열' in k]
3. series to list
"""
Description
(AS-IS)
df = pd.DataFrame({
'column1' : [1,2,3],
'column2' : ['a','b','c']
})
(TO-BE)
['a','b','c']
"""
df['column2'].to_list()
4. DataFrame to json 형변환
1) 방법1
인덱스를 Key 값으로, series는 value로
"""
Description:
(AS-IS)
df = pd.DataFrame({
'column1' : [1,2,3],
'column2' : ['a','b','c']
})
(TO-BE)
{0: 'a', 1: 'b', 2: 'c'}
"""
dict(zip(df.index, df['column2']))
2) 방법2
key 값을 인덱스로 설정 후 to_dict()[원하는 value 값]
df.set_index('column1').to_dict()['column2']
5) json 문자열로 변환
"""
Description:
(AS-IS)
{'id': 1, 'username': 'je', 'email': 'juliy9812@naver.com'}
(TO-BE)
'{"id": 1, "username": "je", "email": "juliy9812@naver.com"}'
"""
import json
json_objects = {
'id': 1,
'username': 'je',
'email': 'juliy9812@naver.com'
}
json.dumps(json_objects)
6) DataFrame의 index를 column으로 가져오기
"""
Description:
(AS-IS)
| column1 | column2 |
| 1 | 'a' |
| 2 | 'b' |
| 3 | 'c' |
(TO-BE)
| new_col | column1 | column2 |
| 0 | 1 | 'a' |
| 1 | 2 | 'b' |
| 2 | 3 | 'c' |
"""
df.reset_index().rename(columns={'index':'new_col'})
7) 시각화 할 때 한글 설정
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib import rc, font_manager
for i in font_manager.fontManager.ttflist:
print(i.name, i.fname)
font_fname = i.fname # 경로/글씨체.ttf
prop = font_manager.FontProperties(fname=font_fname)
mpl.rcParams['font.family'] = 'NanumGothic'
mpl.rcParams['axes.unicode_minus'] = False
# 세션 초기화
font_maager._rebuild()
plt.title('한글 테스트')
8) 특정 열에 null 값이 있는 행 삭제
"""
Description:
(AS-IS)
| column1 | column2 |
| 1 | |
| 2 | 'b' |
| 3 | 'c' |
(TO-BE)
| column1 | column2 |
| 2 | 'b' |
| 3 | 'c' |
"""
df_null = pd.DataFrame({
'column1' : [1,2,3],
'column2' : ['','b','c']
})
# 1) null 값을 np.nan으로 변경
df_null['column2'].replace('', np.nan, inplace=True)
# 2) np.nan인 행 삭제
df_null.dropna(subset=['column2'])
# 2_) or null 값을 0으로 변경
df_null.fillna(0)
9) loc, iloc
loc : 인덱스 값 자체
iloc : 인덱스의 순서(0번째, 1번째, ...)
"""
Description:
(AS-IS)
| column1 | column2 |
1 | 2 | 'b' |
2 | 3 | 'c' |
(TO-BE)
column1 2
column2 b
Name: 1, dtype: object
-> series 형태로 반환
"""
# ㅣoc 사용
df.loc[1]
# iloc 사용
df.iloc[0]
10) set으로 묶기
두 개의 컬럼을 하나의 set 형태의 데이터로 묶기
"""
Description:
(AS-IS)
| column1 | column2 |
| 2 | 'b' |
| 3 | 'c' |
(TO-BE)
| column1 | column2 | set_col |
| 2 | 'b' | {2,b}
| 3 | 'c' | {3,c}
"""
df.loc[:, 'set_col'] = df[['column1','column2']].agg(set, axis=1)
11) json key에 해당하는 데이터 가져오기
mapper = {
1: 'first',
2: 'second',
3: 'third',
4: 'fourth',
5: 'fifth'
}
# return : 'third'
mapper[3]
# return : 'third'
mapperget(3)
# ['first', 'second', 'third'] (리스트를 return)
lst = [1,2,3]
list(map(lambda x: json.get(x), lst))
12) 특정 컬럼에 해당하는 값 가져오기
방법1) mapper 만들고 기준 컬럼을 통한 병합
"""
Description:
mapper = df.set_index('기준컬럼명')['나타낼 컬럼명'].to_dict()
병합할df.loc[:, 'column'] = 병합할df.loc[:, '기준컬럼명'].map(mapper명)
"""
df = pd.DataFrame({
'column1' : ['a','b','c'],
'column2' : ['apple','bike','circle']
})
# mapper 생성
mapper = df.set_index('column1')['column2'].to_dict()
# 새로운 DataFrame에 병합
new_df = pd.DataFrame({
'column1' : [1,2,3],
'column2' : ['a','b','c']
})
new_df.loc[:, 'new_col'] = new_df.loc[:, 'column2'].map(mapper)
방법2) merge
on='기준컬럼명' -> 두 데이터프레임의 컬럼명이 같아야 함.
13) groupby
df.groupby('column1').apply(lambda x: x.groupby('column2').size())
df.groupby('column1').apply(lambda x: x.sort_values(by='기준'))
def categorize_status(group):
if '00' in group.values:
return 'success'
elif '10' in group.values:
return 'dead'
else:
return 'none'
## apply
df['column2'] = df.groupby('status').apply(categorize_status)
## transform
groups = df.groupby('key')['status']
df['column2'] = groups.transform(categorize_status)
14) 두 개의 열을 비교한 후 조건에 맞는 새로운 컬럼 생성
df.apply(lambda x: True if x['column1'] in x['column2']
else False, axis=1)
15) 특정값을 포함한 행 삭제
"""
Description:
(AS-IS)
| column1 | column2 |
| a | apple |
| b | bike |
| c | circle |
(TO-BE)
'bike'라는 특정 문자열을 가진 행 제거
| column1 | column2 |
| a | apple |
| c | circle |
"""
rm_row = df['column2'].isin(['bike'])
df[~rm_row]
16) 두개의 컬럼을 합쳐서 연산
"""
Description:
(AS-IS)
| column1 | column2 |
| a | apple |
| b | bike |
| c | circle |
(TO-BE)
[('a', 'apple'), ('b', 'bike'), ('c', 'circle')]
"""
list(zip(df['column1'], df['column2']))
17) append row in data file(csv, parquet)
df.to_csv('./tmp.csv', mode='a', index=False, header=False)
df.to_parquet('./tmp.parquet', engine='fastparquet', append=True)