출처: https://3months.tistory.com/292 [Deep Play]
Deep Play님의 소중한 글에서 제가 보기편하게 편집하였음.
0.빈 데이터프레임 생성
df = DataFrame(columns=("c1", "c2", "c3"))
1. 데이터프레임 생성(numpy)
my_array = np.array([[1, 2, 3], [4, 5, 6]])
my_df=pd.DataFrame(my_array)
display(my_df)
0 1 2
0 1 2 3
1 4 5 6
1_2. 데이터프레임 생성(list)
my_list =[[1, 2, 3], [4, 5, 6]]
my_df=pd.DataFrame(my_list)
display(my_df)
0 1 2
0 1 2 3
1 4 5 6
2. 데이터프레임 생성(dictionary)
my_dict = {"a": ['1', '3'], "b": ['1', '2'], "c": ['2', '4']}
my_df = pd.DataFrame(my_dict)
display(my_df)
a b c
0 1 1 2
1 3 2 4
3. 데이터프레임 생성(data, index, column을 지정)
my_df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), index= [2.5, 12.6, 4.8], columns=[48, 49, 50])
display(my_df)
48 49 50
2.5 1 2 3
12.6 4 5 6
4.8 7 8 9
4. 데이터프레임 생성(Series)
my_series = pd.Series({"United Kingdom":"London", "India":"New Delhi", "United States":"Washington", "Belgium":"Brussels"}) # 데이터 프레임의 한컬럼 한컬럼이 시리즈이다.
display(pd.DataFrame(my_series))
0
United Kingdom London
India New Delhi
United States Washington
Belgium Brussels
5. 데이터프레임의 Shape 및 길이 구하기
df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6]]))
display(df.shape)
display(len(df.index))
(2, 3)
2
6. 데이터프레임의 컬럼 및 인덱스 구하기
df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6]]))
a = list(df.columns)
b = list(df.index)
display(a)
display(b)
[0, 1, 2]
[0, 1]
7. 데이터프레임의 행(로우) 인덱싱
df = pd.DataFrame({"A":[1,2,3],"B":['a','d','g'], "C":['b','e','h'], "D":['c','f','i']})
df = df.set_index('A')
display(df)
display(df.iloc[1]) # iloc는 1번째 행을 참조하지만 loc와 ix는 index이름인 1을 참조하여 시리즈를 반환한다.
display(df.loc[1])
display(df.ix[1])
B C D
A
1 a b c
2 d e f
3 g h i
B d
C e
D f
B a
C b
D c
B a
C b
D c
7_1. 데이터프레임의 행(로우) 인덱싱(컬럼에 where 조건을 걸어)
df = pd.DataFrame({"A":[1,2,3],"B":['a','d','g'], "C":['b','e','h'], "D":['c','f','i']})
print(df)
print(df[df.A == 1])
A B C D
0 1 a b c
1 2 d e f
2 3 g h i
A B C D
0 1 a b c
8. 데이터프레임의 열(컬럼) 인덱싱
df = pd.DataFrame({"A":[1,4,7], "B":[2,5,8], "C":[3,6,9]})
display(df)
display(df.loc[:,'A'])
display(df['A'])
A B C
0 1 2 3
1 4 5 6
2 7 8 9
0 1
1 4
2 7
0 1
1 4
2 7
9. 데이터프레임의 로우, 컬럼 인덱싱(특정 값)
df = pd.DataFrame({"A":[1,4,7], "B":[2,5,8], "C":[3,6,9]})
display(df.ix[0]['B'])
display(df.loc[0]['B'])
display(df.iloc[0][1])
2
2
2
10. 데이터프레임의 데이터프레임(잘라서) 반환
df = pd.DataFrame({"A":[1,4,7], "B":[2,5,8], "C":[3,6,9]})
display(df.loc[0:1,:'B'])
A B
0 1 2
1 4 5
display(df[['A','C']]) # 복수컬럼을 지정하여 잘라서 데이터프레임으로 반환
A C
0 1 3
1 4 6
2 7 9
11. 인덱스 설정하기
df = pd.DataFrame({"A":[1,4,7], "B":[2,5,8], "C":[3,6,9]})
display(df)
df = df.set_index('A')
display(df)
A B C
0 1 2 3
1 4 5 6
2 7 8 9
B C
A
1 2 3
4 5 6
7 8 9
12. 로우 추가하기(행지정)
df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), index= [2.5, 12.6, 4.8], columns=[48, 49, 50])
display(df)
df.ix[2] = [60, 50, 40] # There's no index labeled `2`, so you will change the index at position `2`
display(df)
df.loc[2] = [11, 12, 13] # This will make an index labeled `2` and add the new values
display(df)
48 49 50
2.5 1 2 3
12.6 4 5 6
4.8 7 8 9
48 49 50
2.5 1 2 3
12.6 4 5 6
4.8 60 50 40
48 49 50
2.5 1 2 3
12.6 4 5 6
4.8 60 50 40
2.0 11 12 13
13. 로우 추가하기(맨뒤에 - dataframe을 만들어서 추가하는 형태)
df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=[48, 49, 50])
display(df)
a = pd.DataFrame(data=[[1,2,3]], columns=[48,49,50])
display(a)
df = df.append(a)
display(df)
df = df.reset_index(drop=True) # 인덱스를 재배열한다 (이전 인덱스 삭제)
display(df)
48 49 50
0 1 2 3
1 4 5 6
2 7 8 9
48 49 50
0 1 2 3
48 49 50
0 1 2 3
1 4 5 6
2 7 8 9
0 1 2 3
48 49 50
0 1 2 3
1 4 5 6
2 7 8 9
3 1 2 3
14. 컬럼 추가하기(Series로 부터)
df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=['A', 'B', 'C'])
display(df)
df.loc[:, 'D'] = pd.Series(['5', '6', '7'], index=df.index) # loc함수를 통한 Series추가
display(df)
df['E'] = pd.Series(['5', '6', '7'], index=df.index) # 컬럼명을 지정하여 Series추가
display(df)
A B C
0 1 2 3
1 4 5 6
2 7 8 9
A B C D
0 1 2 3 5
1 4 5 6 6
2 7 8 9 7
A B C D E
0 1 2 3 5 5
1 4 5 6 6 6
2 7 8 9 7 7
14_2. 컬럼 추가하기(단일값)
df = pd.DataFrame(np.array([['i1',1,'a',111],['i2',2,'b',222],['i3',3,'c',333]]),columns=['i_col','x1','x2','x3'])
print(df)
df["x4"] = 6
print(df)
i_col x1 x2 x3
0 i1 1 a 111
1 i2 2 b 222
2 i3 3 c 333
i_col x1 x2 x3 x4
0 i1 1 a 111 6
1 i2 2 b 222 6
2 i3 3 c 333 6
14_3 컬럼값 변경
데이터 프레임에서 series를 추출 후 for문을 통해 변환로직을 거쳐 list를 만들어 낸다. 이후 다시 series를 list로 치환한다.
import pandas as pd
from pandas import Series, DataFrame
import numpy as np
data = DataFrame(columns=["dates","val"])
templist = [["2019-01-01",89],["2019-01-02",70]]
for i in range(len(templist)):
data.loc[i] = templist[i]
print(data)
print(type(data.ix[0][0]))
templist=[]
for i in data['dates']:
i= np.datetime64(i)
templist.append(i)
data['dates' ]= templist
print(data)
print(type(data.ix[0][0]))
C:\Anaconda3\envs\vfifth\python.exe D:/02_Python/01_workspace/ziplinetest/test.py
dates val
0 2019-01-01 89
1 2019-01-02 70
<class 'str'>
dates val
0 2019-01-01 89
1 2019-01-02 70
<class 'pandas._libs.tslib.Timestamp'>
15. 열 삭제
df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=['A', 'B', 'C'])
display(df)
df.drop('A', axis=1, inplace=True) # drop axis의 경우 column이면 1, row이면 0이다.
display(df)
A B C
0 1 2 3
1 4 5 6
2 7 8 9
B C
0 2 3
1 5 6
2 8 9
16. 중복 로우 삭제
df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [40, 50, 60], [23, 35, 37]]),
index= [2.5, 12.6, 4.8, 4.8, 2.5],
columns=[48, 49, 50])
display(df)
df = df.reset_index() # 인덱스열을 신규로 생성하고 기존 인덱스는 'index'라는 컬럼값을 가진 열로 변경된다.
display(df)
df = df.drop_duplicates(subset='index', keep='last').set_index('index') # 컬럼명이 index인 중복된 로우를 둘다 삭제하고 'index'명을 가진 컬럼을 인덱스로 다시 바꿈
display(df)
48 49 50
2.5 1 2 3
12.6 4 5 6
4.8 7 8 9
4.8 40 50 60
2.5 23 35 37
index 48 49 50
0 2.5 1 2 3
1 12.6 4 5 6
2 4.8 7 8 9
3 4.8 40 50 60
4 2.5 23 35 37
48 49 50
index
12.6 4 5 6
4.8 40 50 60
2.5 23 35 37
17. 인덱스를 통한 로우 삭제
df = pd.DataFrame(data=np.array([[1, 2, 3], [1, 5, 6], [7, 8, 9]]), columns=['A', 'B', 'C'])
display(df)
print(df.index[1])
df = df.drop(df.index[1])
display(df)
df = pd.DataFrame(data=np.array([[1, 2, 3], [1, 5, 6], [7, 8, 9]]), columns=['A', 'B', 'C'])
df = df.drop(0)
display(df)
A B C
0 1 2 3
1 1 5 6
2 7 8 9
1
A B C
0 1 2 3
2 7 8 9
A B C
1 1 5 6
2 7 8 9
18. 데이터 변경(수정)
df = pd.DataFrame(data=np.array([[1, 2, 3], [1, 5, 6], [7, 8, 9]]), columns=['A', 'B', 'C'])
display(df)
df.iat[0 , 0] = 0
display(df)
A B C
0 1 2 3
1 1 5 6
2 7 8 9
A B C
0 0 2 3
1 1 5 6
2 7 8 9
19. dataframe 출력 컬럼 너비 및 개수 조정
pd.set_option('display.max_colwidth', -1) # 출력 컬럼 너비 조정
pd.set_option('display.max_columns', 10) # 출력 컬럼 개수 조정
20. 컬럼 데이터타입 출력 및 변경
df = pd.DataFrame({'A': [1, 2, 3], 'B': [1.0, 2.0, 3.0],
'C': ['1.1.2010', '2.1.2011', '3.1.2011'],
'D': ['1 days', '2 days', '3 days'],
'E': ['1', '2', '3']})
print(df)
print(df.dtypes) # 컬럼 데이터타입 출력
df['A'] = df['A'].astype('float')
df['B'] = df['B'].astype('int')
print(df)
print(df.dtypes) # 컬럼 데이터타입 출력
A B C D E
0 1 1.0 1.1.2010 1 days 1
1 2 2.0 2.1.2011 2 days 2
2 3 3.0 3.1.2011 3 days 3
A int64
B float64
C object
D object
E object
dtype: object
A B C D E
0 1.0 1 1.1.2010 1 days 1
1 2.0 2 2.1.2011 2 days 2
2 3.0 3 3.1.2011 3 days 3
A float64
B int32
C object
D object
E object
dtype: object
21. 데이터프레임에서 NAN 처리
df = pd.DataFrame([[1,np.nan, 2, np.nan],
[3,np.nan, 4, np.nan],
[5,6, 7, 8],
[np.nan, np.nan, np.nan, np.nan]
])
print(df)
# NAN이 포함된 행 삭제하기
df_modify = df.dropna()
print(df_modify)
# NAN을 특정값으로 바꾸기
df_modify = df.fillna(0)
print(df_modify)
0 1 2 3
0 1.0 NaN 2.0 NaN
1 3.0 NaN 4.0 NaN
2 5.0 6.0 7.0 8.0
3 NaN NaN NaN NaN
0 1 2 3
2 5.0 6.0 7.0 8.0
0 1 2 3
0 1.0 0.0 2.0 0.0
1 3.0 0.0 4.0 0.0
2 5.0 6.0 7.0 8.0
3 0.0 0.0 0.0 0.0
22. DataFrame null 체크(empty)
df = pd.DataFrame([[1, 2, 3, 4],
[5, 6, 7, 8]
])
if df.empty != True:
print(df)
df = df.drop(df.index[0])
df = df.drop(df.index[0])
if df.empty == True:
print('empty')
0 1 2 3
0 1 2 3 4
1 5 6 7 8
empty
23. DataFrame group by
df = pd.DataFrame({'group': ['a', 'a', 'a', 'b', 'b', 'b'],
'value_1': np.arange(6),
'value_2': np.random.randn(6)})
print (df)
# group by object 생성
grouped = df.groupby('group')
print(grouped)
resultdf = grouped.sum()
print(resultdf)
resultdf = grouped.count()
print(resultdf)
group value_1 value_2
0 a 0 -0.025190
1 a 1 -0.121851
2 a 2 -0.231343
3 b 3 0.125051
4 b 4 0.287052
5 b 5 -0.313823
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0430D790>
value_1 value_2
group
a 3 -0.378384
b 12 0.098281
value_1 value_2
group
a 3 3
b 3 3
'Language > python' 카테고리의 다른 글
[ Python conda ] conda 가상환경 관리 (0) | 2019.12.19 |
---|---|
[ Python 자료형 ] numpy 관리 (0) | 2019.12.08 |
[ Python 자료형 ] 집합(Set) 관리 (0) | 2019.12.08 |
[ Python 자료형 ] Dictionary (0) | 2019.12.08 |
[ Python 자료형 ] Tuple (0) | 2019.12.08 |