Pandas: powerful Python data analysis toolkit
import pandas as pd
CCTV_Seoul = pd.read_csv("data\\01.Seoul_CCTV.csv", encoding="euc-kr")
CCTV_Seoul.head()
-통상csv는 띄어쓰기로 구분되니 read_csv명령으로 읽기만 해도 됨
-긴 파일명을 끝까지 입력하지말고 적당한 곳에서 Tab키
-한글은 encoding 필요 ※encoding에 'utf-8'또는'euc-kr'또는 'cp949' 입력필요
-head()는 파일이 긴 경우에 앞부분 5개만 보여달라는 뜻
CCTV_Seoul.columns
⇊
ndex(['구분', '총계', '2013년 이전\n설치된 CCTV', '2013년', '2014년', '2015년', '2016년',
'2017년', '2018년', '2019년',
...
'Unnamed: 16374', 'Unnamed: 16375', 'Unnamed: 16376', 'Unnamed: 16377',
'Unnamed: 16378', 'Unnamed: 16379', 'Unnamed: 16380', 'Unnamed: 16381',
'Unnamed: 16382', 'Unnamed: 16383'],
dtype='object', length=16384)
CCTV_Seoul.columns[0]
⇊
'구분'
CCTV_Seoul.rename(columns={CCTV_Seoul.columns[0]: '구별'}, inplace=True)
CCTV_Seoul.head()
⇊
-판다스는 셀병합이 없기떄문에 엑셀에서 셀병합이 된 데이터는 판다스에서 다 풀어져서 나타남
import pandas as pd
pop_Seoul = pd.read_excel('data\\01.Seoul_Population.xls', header=1, usecols='B, C, E, F, G')
pop_Seoul.head()
⇊
-자료를 읽기 시작할 행(header)를 지정
-읽어올 컬럼(usecols) 지정
pop_Seoul.rename(columns={pop_Seoul.columns[0]: "구별",
pop_Seoul.columns[1]: "인구수",
pop_Seoul.columns[2]: "한국인",
pop_Seoul.columns[3]: "외국인",
pop_Seoul.columns[4]: "고령자"}, inplace=True)
pop_Seoul.head()
⇊
import pandas as pd
import numpy as np
s= pd.Series([1, 3, 5, np.nan, 6, 8])
s
⇊
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
-Pandas의 데이터형을 구성하는 기본은 Series
dates = pd.date_range('20230329', periods=6)
dates
⇊
DatetimeIndex(['2023-03-29', '2023-03-30', '2023-03-31', '2023-04-01',
'2023-04-02', '2023-04-03'],
dtype='datetime64[ns]', freq='D')
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=['A', 'B', 'C', 'D'])
df
⇊
df.info()
⇊
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 6 entries, 2023-03-29 to 2023-04-03
Freq: D
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 A 6 non-null float64
1 B 6 non-null float64
2 C 6 non-null float64
3 D 6 non-null float64
dtypes: float64(4)
memory usage: 240.0 bytes
df.describe()
⇊
df.sort_values(by='B', ascending=False)
⇊
df['A']
⇊
2023-03-29 0.759095
2023-03-30 1.780505
2023-03-31 -1.923109
2023-04-01 0.084812
2023-04-02 0.784741
2023-04-03 -0.068214
Freq: D, Name: A, dtype: float64
df[0:3]
⇊
df.loc[:, ['A', 'B']]
⇊
df.loc['20230329':'20230331',['A','B']]'
⇊
df.iloc[3]
⇊
A 0.084812
B 1.437729
C -0.462170
D -1.659979
Name: 2023-04-01 00:00:00, dtype: float64
df.iloc[3:5, 0:2]
⇊
df[df > 0]
0보다 작은것은 NaN(Not a Number)처리 됨
⇊
df['E'] = ['one', 'one', 'two', 'three', 'four', 'three']
df
리스트안 데이터값을 가진 E 컬럼을 새로 생성
⇊
df['E'].isin(['two', 'four'])
특정 요소가 있는지 확인
⇊
2023-03-29 False
2023-03-30 False
2023-03-31 True
2023-04-01 False
2023-04-02 True
2023-04-03 False
Freq: D, Name: E, dtype: bool
df[df['E'].isin(['two', 'four'])]
특정 요소가 있는 행만 선택
⇊
특정 컬럼 제거
del df['E']
df
⇊
함수적용
df.apply(np.cumsum)
⇊
df['A'].apply('sum')
합계
⇊
1.417830998246393
df['A'].apply('mean')
평균
⇊
0.23630516637439883
df['A'].apply('min'), df['A'].apply('max')
최솟값, 최댓값
⇊
(-1.92310857808862, 1.7805054764336063)