728x90
Reshaping Data¶
In [1]:
import pandas as pd
import seaborn as sns
melt¶
: 멜트는 행을 녹여서 컬럼으로 보낸다는 느낌의 함수입니다.
In [2]:
df = pd.DataFrame(
[[4, 7, 10],
[5, 8, 11],
[6, 9, 12]],
index=[1, 2, 3],
columns=['a', 'b', 'c'])
df
Out[2]:
a | b | c | |
---|---|---|---|
1 | 4 | 7 | 10 |
2 | 5 | 8 | 11 |
3 | 6 | 9 | 12 |
In [3]:
pd.melt(df)
Out[3]:
variable | value | |
---|---|---|
0 | a | 4 |
1 | a | 5 |
2 | a | 6 |
3 | b | 7 |
4 | b | 8 |
5 | b | 9 |
6 | c | 10 |
7 | c | 11 |
8 | c | 12 |
옵션을 지정하지 않으면 다음과 같은 형태로 데이터를 변형합니다.
In [4]:
pd.melt(df, id_vars=['a'], value_vars=['b'])
Out[4]:
a | variable | value | |
---|---|---|---|
0 | 4 | b | 7 |
1 | 5 | b | 8 |
2 | 6 | b | 9 |
다음은 a를 기준으로 b를 행으로 녹인다는 뜻입니다. 컬럼에 있었던 b가 행으로 녹아졌고 각각의 해당값는 값들이 value값으로 들어갔습니다.
pivot¶
: pivot은 피벗 데이터블을 만들기 위한 함수입니다.
In [5]:
df = pd.DataFrame([
['20200101', 'A', 100],
['20200101', 'B', 200],
['20200101', 'C', 100],
['20200401', 'A', 150],
['20200401', 'B', 210],
['20200401', 'C', 40],
['20200701', 'A', 10],
['20200701', 'B', 50],
['20200701', 'C', 350],],
columns=['date', 'type', 'price'])
df
Out[5]:
date | type | price | |
---|---|---|---|
0 | 20200101 | A | 100 |
1 | 20200101 | B | 200 |
2 | 20200101 | C | 100 |
3 | 20200401 | A | 150 |
4 | 20200401 | B | 210 |
5 | 20200401 | C | 40 |
6 | 20200701 | A | 10 |
7 | 20200701 | B | 50 |
8 | 20200701 | C | 350 |
In [6]:
df = df.pivot(index='date', columns='type', values='price' )
In [7]:
df
Out[7]:
type | A | B | C |
---|---|---|---|
date | |||
20200101 | 100 | 200 | 100 |
20200401 | 150 | 210 | 40 |
20200701 | 10 | 50 | 350 |
In [8]:
df = sns.load_dataset("mpg")
df.shape
Out[8]:
(398, 9)
set_index()¶
- 특정 열을 인덱스로 설정할때 사용합니다.
In [9]:
exam = {'이름' : ['민지','종원','시연'],
'수학' : [95,90,80],
'영어' : [100,8,90],
'음악' : [70,80,100],
'체육' : [60,100,80]}
exam = pd.DataFrame(exam)
print(exam)
print('\n')
exam1 = exam.set_index('이름')
print(exam1)
print('\n')
exam2 = exam1.set_index(['음악'])
print(exam2)
print('\n')
exam2 = exam1.set_index(['수학','음악'])
print(exam2)
이름 수학 영어 음악 체육 0 민지 95 100 70 60 1 종원 90 8 80 100 2 시연 80 90 100 80 수학 영어 음악 체육 이름 민지 95 100 70 60 종원 90 8 80 100 시연 80 90 100 80 수학 영어 체육 음악 70 95 100 60 80 90 8 100 100 80 90 80 영어 체육 수학 음악 95 70 100 60 90 80 8 100 80 100 90 80
reset_index()¶
- 행 인덱스를 재배열 하는 함수입니다.
In [10]:
df = {'A0':[1,2,3], 'A1':[4,5,6], 'A2':[7,8,9], 'A3':[10,11,12], 'A4':[13,14,15]}
df = pd.DataFrame(df, index = ['B0','B1','B2'])
print(df)
A0 A1 A2 A3 A4 B0 1 4 7 10 13 B1 2 5 8 11 14 B2 3 6 9 12 15
In [11]:
df2 = df.reset_index()
print(df2)
index A0 A1 A2 A3 A4 0 B0 1 4 7 10 13 1 B1 2 5 8 11 14 2 B2 3 6 9 12 15
다음과 같이 0부터 시작하는 순서로 초기화가 되었습니다.
In [12]:
df3 = df.reset_index(drop=True)
print(df3)
A0 A1 A2 A3 A4 0 1 4 7 10 13 1 2 5 8 11 14 2 3 6 9 12 15
drop = True 옵션을 설정하면 원래 존재했던 인덱스를 없애줍니다.
sort_index¶
- 인덱스를 기준으로 정렬합니다.
In [13]:
df4 = df.sort_index(ascending=False)
print(df4)
A0 A1 A2 A3 A4 B2 3 6 9 12 15 B1 2 5 8 11 14 B0 1 4 7 10 13
sort_values¶
- 열의 값을 기준으로 행을 정렬합니다.
- default값은 낮은순으로 정렬합니다.
In [14]:
df = sns.load_dataset("mpg")
In [15]:
df.sort_values('mpg').head()
Out[15]:
mpg | cylinders | displacement | horsepower | weight | acceleration | model_year | origin | name | |
---|---|---|---|---|---|---|---|---|---|
28 | 9.0 | 8 | 304.0 | 193.0 | 4732 | 18.5 | 70 | usa | hi 1200d |
25 | 10.0 | 8 | 360.0 | 215.0 | 4615 | 14.0 | 70 | usa | ford f250 |
26 | 10.0 | 8 | 307.0 | 200.0 | 4376 | 15.0 | 70 | usa | chevy c20 |
103 | 11.0 | 8 | 400.0 | 150.0 | 4997 | 14.0 | 73 | usa | chevrolet impala |
124 | 11.0 | 8 | 350.0 | 180.0 | 3664 | 11.0 | 73 | usa | oldsmobile omega |
In [16]:
df.sort_values('mpg', ascending=False).head()
Out[16]:
mpg | cylinders | displacement | horsepower | weight | acceleration | model_year | origin | name | |
---|---|---|---|---|---|---|---|---|---|
322 | 46.6 | 4 | 86.0 | 65.0 | 2110 | 17.9 | 80 | japan | mazda glc |
329 | 44.6 | 4 | 91.0 | 67.0 | 1850 | 13.8 | 80 | japan | honda civic 1500 gl |
325 | 44.3 | 4 | 90.0 | 48.0 | 2085 | 21.7 | 80 | europe | vw rabbit c (diesel) |
394 | 44.0 | 4 | 97.0 | 52.0 | 2130 | 24.6 | 82 | europe | vw pickup |
326 | 43.4 | 4 | 90.0 | 48.0 | 2335 | 23.7 | 80 | europe | vw dasher (diesel) |
- ascending=False 옵션을 지정하면 높은순으로 정렬합니다.
rename¶
- 열의 이름을 바꾸는 함수입니다.
In [17]:
df = df.rename(columns = {'model_year':'year'})
df.head()
Out[17]:
mpg | cylinders | displacement | horsepower | weight | acceleration | year | origin | name | |
---|---|---|---|---|---|---|---|---|---|
0 | 18.0 | 8 | 307.0 | 130.0 | 3504 | 12.0 | 70 | usa | chevrolet chevelle malibu |
1 | 15.0 | 8 | 350.0 | 165.0 | 3693 | 11.5 | 70 | usa | buick skylark 320 |
2 | 18.0 | 8 | 318.0 | 150.0 | 3436 | 11.0 | 70 | usa | plymouth satellite |
3 | 16.0 | 8 | 304.0 | 150.0 | 3433 | 12.0 | 70 | usa | amc rebel sst |
4 | 17.0 | 8 | 302.0 | 140.0 | 3449 | 10.5 | 70 | usa | ford torino |
drop¶
- 열을 삭제하는 함수입니다.
In [18]:
df = df.drop(columns=['weight','year'])
df.head()
Out[18]:
mpg | cylinders | displacement | horsepower | acceleration | origin | name | |
---|---|---|---|---|---|---|---|
0 | 18.0 | 8 | 307.0 | 130.0 | 12.0 | usa | chevrolet chevelle malibu |
1 | 15.0 | 8 | 350.0 | 165.0 | 11.5 | usa | buick skylark 320 |
2 | 18.0 | 8 | 318.0 | 150.0 | 11.0 | usa | plymouth satellite |
3 | 16.0 | 8 | 304.0 | 150.0 | 12.0 | usa | amc rebel sst |
4 | 17.0 | 8 | 302.0 | 140.0 | 10.5 | usa | ford torino |
In [1]:
from IPython.core.display import display, HTML
display(HTML("<style>.container {width:90% !important;}</style>"))
'Python' 카테고리의 다른 글
[Pandas] Pandas Cheat Sheet(Subset Variables (Columns)) (0) | 2021.06.20 |
---|---|
[Pandas] Pandas Cheat Sheet(Subset Observations(Rows)) (0) | 2021.05.23 |
[Pandas] Pandas Cheat Sheet (Creating DataFrames) (0) | 2021.05.16 |
[Pandas] Pandas Cheat Sheet (판다스 치트 시트) (1) | 2021.05.16 |
[Pandas] 유일한 값 찾기 unique(), nunique(), value_counts() (4) | 2021.02.02 |