Pandas
파이썬의 데이터 구조 셋은 이미 잘갖추어져 있지만, pandas 모듈은 여기에 두가지 컨테이너인 Series와 DataFrame을 추가한다.
- 시리즈는 레이블이 붙은 1차원 벡터다.
- 프레임은 레이블이 붙은 행과 열로 구성된 테이블이다.
- 프레임의 각 열은 시리즈다. 몇 가지 예외를 제외하면 pandas는 프레임을 시리즈와 유사하게 취급한다
- 프레임과 시리즈는 다음과 같이 다양한 데이터 전처리함수를 가진다.
- 단순 혹은계층적 인덱싱 - 결측치 처리 - 전체 열과 테이블에서 사칙 ,논리 연산 - 데이터 베이스 - 타입연산 (결합이나 집계 등) - 단일 열이나 전체 테이블 시각화 - 파일에서 데이터 읽고 쓰기
시리즈 : 1차원 벡터
import pandas as pd
series = pd.Series((2,3,2,6,4,1,2,3,45,1,2,3,4,2,-1,-2,))
print(len(series)) # 시리즈의 길이
print(series)
16
0 2
1 3
2 2
3 6
4 4
5 1
6 2
7 3
8 45
9 1
10 2
11 3
12 4
13 2
14 -1
15 -2
dtype: int64
시리즈의 인덱스는 정수형이 기본값이다.
series.index.values
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
dtype=int64)
프레임
레이블이 붙은 행과 열로 구성된 테이블
- 데이터 프레임은 2차원 numpy 배열, 튜플로 구성된 리스트,파이썬 딕셔너리
와 또 다른 데이터 프레임으로 생성 가능
import pandas as pd
alco2009 = pd.read_csv('./2020-08/excel/niaaa-report2009.csv',index_col="State")
alco2009.head()
Beer | Wine | Spirits | |
---|---|---|---|
State | |||
Alabama | 1.20 | 0.22 | 0.58 |
Alaska | 1.31 | 0.54 | 1.16 |
Arizona | 1.19 | 0.38 | 0.74 |
Arkansas | 1.07 | 0.17 | 0.60 |
California | 1.05 | 0.55 | 0.73 |
데이터 모양 바꾸기
- reset_index()와 set_index(column) 함수는 기존 인덱스를 떼어 내거나 새로운 인덱스를 만든다
- 옵셔널 파라미터 inplace = True가 주어지면 기존 데이터 프레임 자체를 수정한다
alco2009.reset_index().head()
State | Beer | Wine | Spirits | |
---|---|---|---|---|
0 | Alabama | 1.20 | 0.22 | 0.58 |
1 | Alaska | 1.31 | 0.54 | 1.16 |
2 | Arizona | 1.19 | 0.38 | 0.74 |
3 | Arkansas | 1.07 | 0.17 | 0.60 |
4 | California | 1.05 | 0.55 | 0.73 |
alco2009.reset_index().set_index("Beer").head()
State | Wine | Spirits | |
---|---|---|---|
Beer | |||
1.20 | Alabama | 0.22 | 0.58 |
1.31 | Alaska | 0.54 | 1.16 |
1.19 | Arizona | 0.38 | 0.74 |
1.07 | Arkansas | 0.17 | 0.60 |
1.05 | California | 0.55 | 0.73 |
재인덱싱
기존 데이터 프레임과 시리즈에서 행이나 열,행과 열을 추려서 새 데이터 프레임이나 시리즈를 생성한다
s_states = [state for state in alco2009.index if state[0]=='S']+["Samoa"]
print(s_states)
drinks = list(alco2009.columns)+['Water']
print(drinks)
nan_alco = alco2009.reindex(s_states, columns = drinks)
nan_alco
['South Carolina', 'South Dakota', 'Samoa']
['Beer', 'Wine', 'Spirits', 'Water']
Beer | Wine | Spirits | Water | |
---|---|---|---|---|
State | ||||
South Carolina | 1.36 | 0.24 | 0.77 | NaN |
South Dakota | 1.53 | 0.22 | 0.88 | NaN |
Samoa | NaN | NaN | NaN | NaN |
스태킹과 피보팅
열 이름을 계층화 하는 대신 멀티인덱스의 전체 혹은 일부를 평평하게 할 수도 있다.
반대로 인덱스를 계층화 하는 대신 다층으로 구성된 열이름의 전체나 일부를 평평하게 할 수도 있다.
- stack() 함수는 인덱스의 레벨 개수를 증가시키는 동시에 열 이름의 레벨 개수를 감소 시킨다**
- unstack() 함수는 인덱스 레벨 개수를 낮추고 열 이름의 레벨 개수를 높인다.
- pivot(index,columns,values) 함수는 기존 데이터 프레임을 새로운 데이터 프레임으로 변환.
- 그 과정에서 index로 넘기는열을 새로운 인덱스로 사용하고 ,columns를 새로운 열 이름 리스로 사용하며 values 에 해당하는 열은 데이터 프레임을 채우는 데이터로 사용한다.
alco = pd.read_csv("./2020-08/excel/niaaa-report.csv",index_col=["State","Year"])
alco
Beer | Wine | Spirits | ||
---|---|---|---|---|
State | Year | |||
Alabama | 1977 | 0.99 | 0.13 | 0.84 |
1978 | 0.98 | 0.12 | 0.88 | |
1979 | 0.98 | 0.12 | 0.84 | |
1980 | 0.96 | 0.16 | 0.74 | |
1981 | 1.00 | 0.19 | 0.73 | |
... | ... | ... | ... | ... |
Wyoming | 2005 | 1.21 | 0.23 | 0.97 |
2006 | 1.47 | 0.23 | 1.05 | |
2007 | 1.49 | 0.23 | 1.10 | |
2008 | 1.54 | 0.23 | 1.12 | |
2009 | 1.45 | 0.22 | 1.10 |
1683 rows × 3 columns
#스태킹
print(alco)
tall_alco=alco.stack()
print(tall_alco)
Beer Wine Spirits
State Year
Alabama 1977 0.99 0.13 0.84
1978 0.98 0.12 0.88
1979 0.98 0.12 0.84
1980 0.96 0.16 0.74
1981 1.00 0.19 0.73
... ... ... ...
Wyoming 2005 1.21 0.23 0.97
2006 1.47 0.23 1.05
2007 1.49 0.23 1.10
2008 1.54 0.23 1.12
2009 1.45 0.22 1.10
[1683 rows x 3 columns]
State Year
Alabama 1977 Beer 0.99
Wine 0.13
Spirits 0.84
1978 Beer 0.98
Wine 0.12
...
Wyoming 2008 Wine 0.23
Spirits 1.12
2009 Beer 1.45
Wine 0.22
Spirits 1.10
Length: 5049, dtype: float64
#언스태킹
print(alco.head())
wide_alco = alco.unstack()
print(wide_alco.head())
Beer Wine Spirits
State Year
Alabama 1977 0.99 0.13 0.84
1978 0.98 0.12 0.88
1979 0.98 0.12 0.84
1980 0.96 0.16 0.74
1981 1.00 0.19 0.73
Beer ... \
Year 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 ...
State ...
Alabama 0.99 0.98 0.98 0.96 1.00 1.00 1.01 1.02 1.06 1.09 ...
Alaska 1.19 1.39 1.50 1.55 1.71 1.75 1.76 1.73 1.68 1.68 ...
Arizona 1.70 1.77 1.86 1.69 1.78 1.74 1.62 1.57 1.67 1.77 ...
Arkansas 0.92 0.97 0.93 1.00 1.06 1.03 1.03 1.02 1.03 1.06 ...
California 1.31 1.36 1.42 1.42 1.43 1.37 1.37 1.38 1.32 1.36 ...
Spirits
Year 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009
State
Alabama 0.51 0.53 0.53 0.52 0.52 0.53 0.55 0.56 0.58 0.58
Alaska 0.92 0.97 1.08 0.79 0.96 0.99 1.02 1.07 1.09 1.16
Arizona 0.71 0.70 0.69 0.71 0.70 0.74 0.78 0.76 0.75 0.74
Arkansas 0.53 0.53 0.53 0.56 0.58 0.58 0.59 0.60 0.60 0.60
California 0.64 0.64 0.63 0.65 0.67 0.68 0.70 0.72 0.72 0.73
[5 rows x 99 columns]
#피보팅 pivot(index,columns,values) : 스태킹과 언스태킹의 더 일반화된 연산
alco = pd.read_csv("./2020-08/excel/niaaa-report.csv")
alco.pivot("Year","State","Wine").head()
'데이터 분석 > 데이터 분석 기초' 카테고리의 다른 글
chipotle 주문 데이터 분석(2) - 데이터 분석 기초 (0) | 2020.10.08 |
---|---|
chipotle 주문 데이터 분석(1) - 데이터 분석 기초 (0) | 2020.10.08 |
데이터 시각화 기초 (0) | 2020.09.18 |
매년 새해 첫날의 기온 그래프 - 데이터 분석 기초 (0) | 2020.09.18 |
pandas 기초 (2) (0) | 2020.09.16 |
Pandas
파이썬의 데이터 구조 셋은 이미 잘갖추어져 있지만, pandas 모듈은 여기에 두가지 컨테이너인 Series와 DataFrame을 추가한다.
- 시리즈는 레이블이 붙은 1차원 벡터다.
- 프레임은 레이블이 붙은 행과 열로 구성된 테이블이다.
- 프레임의 각 열은 시리즈다. 몇 가지 예외를 제외하면 pandas는 프레임을 시리즈와 유사하게 취급한다
- 프레임과 시리즈는 다음과 같이 다양한 데이터 전처리함수를 가진다.
- 단순 혹은계층적 인덱싱 - 결측치 처리 - 전체 열과 테이블에서 사칙 ,논리 연산 - 데이터 베이스 - 타입연산 (결합이나 집계 등) - 단일 열이나 전체 테이블 시각화 - 파일에서 데이터 읽고 쓰기
시리즈 : 1차원 벡터
import pandas as pd
series = pd.Series((2,3,2,6,4,1,2,3,45,1,2,3,4,2,-1,-2,))
print(len(series)) # 시리즈의 길이
print(series)
16
0 2
1 3
2 2
3 6
4 4
5 1
6 2
7 3
8 45
9 1
10 2
11 3
12 4
13 2
14 -1
15 -2
dtype: int64
시리즈의 인덱스는 정수형이 기본값이다.
series.index.values
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
dtype=int64)
프레임
레이블이 붙은 행과 열로 구성된 테이블
- 데이터 프레임은 2차원 numpy 배열, 튜플로 구성된 리스트,파이썬 딕셔너리
와 또 다른 데이터 프레임으로 생성 가능
import pandas as pd
alco2009 = pd.read_csv('./2020-08/excel/niaaa-report2009.csv',index_col="State")
alco2009.head()
Beer | Wine | Spirits | |
---|---|---|---|
State | |||
Alabama | 1.20 | 0.22 | 0.58 |
Alaska | 1.31 | 0.54 | 1.16 |
Arizona | 1.19 | 0.38 | 0.74 |
Arkansas | 1.07 | 0.17 | 0.60 |
California | 1.05 | 0.55 | 0.73 |
데이터 모양 바꾸기
- reset_index()와 set_index(column) 함수는 기존 인덱스를 떼어 내거나 새로운 인덱스를 만든다
- 옵셔널 파라미터 inplace = True가 주어지면 기존 데이터 프레임 자체를 수정한다
alco2009.reset_index().head()
State | Beer | Wine | Spirits | |
---|---|---|---|---|
0 | Alabama | 1.20 | 0.22 | 0.58 |
1 | Alaska | 1.31 | 0.54 | 1.16 |
2 | Arizona | 1.19 | 0.38 | 0.74 |
3 | Arkansas | 1.07 | 0.17 | 0.60 |
4 | California | 1.05 | 0.55 | 0.73 |
alco2009.reset_index().set_index("Beer").head()
State | Wine | Spirits | |
---|---|---|---|
Beer | |||
1.20 | Alabama | 0.22 | 0.58 |
1.31 | Alaska | 0.54 | 1.16 |
1.19 | Arizona | 0.38 | 0.74 |
1.07 | Arkansas | 0.17 | 0.60 |
1.05 | California | 0.55 | 0.73 |
재인덱싱
기존 데이터 프레임과 시리즈에서 행이나 열,행과 열을 추려서 새 데이터 프레임이나 시리즈를 생성한다
s_states = [state for state in alco2009.index if state[0]=='S']+["Samoa"]
print(s_states)
drinks = list(alco2009.columns)+['Water']
print(drinks)
nan_alco = alco2009.reindex(s_states, columns = drinks)
nan_alco
['South Carolina', 'South Dakota', 'Samoa']
['Beer', 'Wine', 'Spirits', 'Water']
Beer | Wine | Spirits | Water | |
---|---|---|---|---|
State | ||||
South Carolina | 1.36 | 0.24 | 0.77 | NaN |
South Dakota | 1.53 | 0.22 | 0.88 | NaN |
Samoa | NaN | NaN | NaN | NaN |
스태킹과 피보팅
열 이름을 계층화 하는 대신 멀티인덱스의 전체 혹은 일부를 평평하게 할 수도 있다.
반대로 인덱스를 계층화 하는 대신 다층으로 구성된 열이름의 전체나 일부를 평평하게 할 수도 있다.
- stack() 함수는 인덱스의 레벨 개수를 증가시키는 동시에 열 이름의 레벨 개수를 감소 시킨다**
- unstack() 함수는 인덱스 레벨 개수를 낮추고 열 이름의 레벨 개수를 높인다.
- pivot(index,columns,values) 함수는 기존 데이터 프레임을 새로운 데이터 프레임으로 변환.
- 그 과정에서 index로 넘기는열을 새로운 인덱스로 사용하고 ,columns를 새로운 열 이름 리스로 사용하며 values 에 해당하는 열은 데이터 프레임을 채우는 데이터로 사용한다.
alco = pd.read_csv("./2020-08/excel/niaaa-report.csv",index_col=["State","Year"])
alco
Beer | Wine | Spirits | ||
---|---|---|---|---|
State | Year | |||
Alabama | 1977 | 0.99 | 0.13 | 0.84 |
1978 | 0.98 | 0.12 | 0.88 | |
1979 | 0.98 | 0.12 | 0.84 | |
1980 | 0.96 | 0.16 | 0.74 | |
1981 | 1.00 | 0.19 | 0.73 | |
... | ... | ... | ... | ... |
Wyoming | 2005 | 1.21 | 0.23 | 0.97 |
2006 | 1.47 | 0.23 | 1.05 | |
2007 | 1.49 | 0.23 | 1.10 | |
2008 | 1.54 | 0.23 | 1.12 | |
2009 | 1.45 | 0.22 | 1.10 |
1683 rows × 3 columns
#스태킹
print(alco)
tall_alco=alco.stack()
print(tall_alco)
Beer Wine Spirits
State Year
Alabama 1977 0.99 0.13 0.84
1978 0.98 0.12 0.88
1979 0.98 0.12 0.84
1980 0.96 0.16 0.74
1981 1.00 0.19 0.73
... ... ... ...
Wyoming 2005 1.21 0.23 0.97
2006 1.47 0.23 1.05
2007 1.49 0.23 1.10
2008 1.54 0.23 1.12
2009 1.45 0.22 1.10
[1683 rows x 3 columns]
State Year
Alabama 1977 Beer 0.99
Wine 0.13
Spirits 0.84
1978 Beer 0.98
Wine 0.12
...
Wyoming 2008 Wine 0.23
Spirits 1.12
2009 Beer 1.45
Wine 0.22
Spirits 1.10
Length: 5049, dtype: float64
#언스태킹
print(alco.head())
wide_alco = alco.unstack()
print(wide_alco.head())
Beer Wine Spirits
State Year
Alabama 1977 0.99 0.13 0.84
1978 0.98 0.12 0.88
1979 0.98 0.12 0.84
1980 0.96 0.16 0.74
1981 1.00 0.19 0.73
Beer ... \
Year 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 ...
State ...
Alabama 0.99 0.98 0.98 0.96 1.00 1.00 1.01 1.02 1.06 1.09 ...
Alaska 1.19 1.39 1.50 1.55 1.71 1.75 1.76 1.73 1.68 1.68 ...
Arizona 1.70 1.77 1.86 1.69 1.78 1.74 1.62 1.57 1.67 1.77 ...
Arkansas 0.92 0.97 0.93 1.00 1.06 1.03 1.03 1.02 1.03 1.06 ...
California 1.31 1.36 1.42 1.42 1.43 1.37 1.37 1.38 1.32 1.36 ...
Spirits
Year 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009
State
Alabama 0.51 0.53 0.53 0.52 0.52 0.53 0.55 0.56 0.58 0.58
Alaska 0.92 0.97 1.08 0.79 0.96 0.99 1.02 1.07 1.09 1.16
Arizona 0.71 0.70 0.69 0.71 0.70 0.74 0.78 0.76 0.75 0.74
Arkansas 0.53 0.53 0.53 0.56 0.58 0.58 0.59 0.60 0.60 0.60
California 0.64 0.64 0.63 0.65 0.67 0.68 0.70 0.72 0.72 0.73
[5 rows x 99 columns]
#피보팅 pivot(index,columns,values) : 스태킹과 언스태킹의 더 일반화된 연산
alco = pd.read_csv("./2020-08/excel/niaaa-report.csv")
alco.pivot("Year","State","Wine").head()
'데이터 분석 > 데이터 분석 기초' 카테고리의 다른 글
chipotle 주문 데이터 분석(2) - 데이터 분석 기초 (0) | 2020.10.08 |
---|---|
chipotle 주문 데이터 분석(1) - 데이터 분석 기초 (0) | 2020.10.08 |
데이터 시각화 기초 (0) | 2020.09.18 |
매년 새해 첫날의 기온 그래프 - 데이터 분석 기초 (0) | 2020.09.18 |
pandas 기초 (2) (0) | 2020.09.16 |