일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Python
- Google Excel
- Tkinter
- hive
- Excel
- Mac
- dataframe
- list
- Google Spreadsheet
- Apache
- numpy
- PostgreSQL
- gas
- PANDAS
- c#
- django
- array
- Kotlin
- SQL
- Github
- Redshift
- string
- PySpark
- google apps script
- Java
- 파이썬
- math
- matplotlib
- GIT
- Today
- Total
달나라 노트
Python Pandas : Series와 DataFrame 본문
Python Pandas
Python에서 Pandas library는 아마 엑셀같은 형태의 데이터를 다루기 위해 가장 많이 사용되는 library중 하나가 아닐 까 싶네요.저도 pandas를 거의 필수적으로 사용하고있다보니 상당히 유용한 library인 것은 틀림없는 것 같습니다.
Pandas의 자료구조 : Series, DataFrame
Pandas에는 대표적으로 Series와 DataFrame이라는 두 가지의 자료구조가 존재합니다.
import pandas as pd
list_item = [1, 2, 3, 4] # Pandas의 Series가 될 list 선언
se_item = pd.Series(list_item) # list를 이용하여 Series 생성
print(se_item)
print(type(se_item))
- Output
0 1
1 2
2 3
3 4
<class 'pandas.core.series.Series'>
위 예시는 4개의 요소를 가진 List를 이용하여 Series를 만들어 본 예시입니다.
결과를 봤을 때가장 왼쪽 컬럼(0, 1, 2, 3)은 row의 번호를 0부터 시작하는 숫자로 표시해주는 index 정보입니다.
즉, 이건 사실 컬럼 자체가 아니라 엑셀의 row 번호를 명시해주는 것과 같죠.그다음 두 번째 컬럼(1, 2, 3, 4)는 우리가 Series를 만들 때 사용했던 list에 들어있던 값입니다.
list에 있던 값들이 순서대로 Series로 만들어졌음을 알 수 있습니다.
import pandas as pd
dict_item = {
'item_id': [1, 2, 3, 4],
'item_name': ['a', 'b', 'c', 'd'],
'price': [1000, 2000, 3000, 4000]
} # Pandas의 DataFrame의 재료가 될 dictionary 선언
df_item = pd.DataFrame(dict_item) # Dictionary를 이용하여 DataFrame 생성
print(df_item)
print(type(df_item))
- Output
item_id item_name price
0 1 a 1000
1 2 b 2000
2 3 c 3000
3 4 d 4000
<class 'pandas.core.frame.DataFrame'>
DataFrame을 만들기 위해선 먼저 dictionary가 있어야 합니다.
위 예시의 결과를 보면dictionary의 key값들(item_id, item_name, price)은 DataFrame의 컬럼 명이 되었음을 알 수 있으며,
dictionary의 각 key에 할당된 list들은 DataFrame의 데이터가 되었음을 알 수 있습니다.
dictionary의 key값들 -> DataFrame의 컬럼명dictionary의 value값들 -> DataFrame에 있는 각 컬럼의 데이터들Series와 DataFrame의 차이라면 Series는 컬럼이 1개만 있는듯한 그림이지만
DataFrame은 컬럼이 2개 이상으로 많아질 수 있습니다.
반대로 이 둘의 공통점이라고하면 가장 왼쪽에 행(row)의 index를 나타내주는 번호가 생겼음을 알 수 있습니다.
import pandas as pd
list_test = [
(1, 'Apple', 'a'),
(2, 'Banana', 'b'),
(3, 'Watermelon', 'c'),
(4, 'Grape', 'd'),
(5, 'Melon', 'e')
]
df_test = pd.DataFrame(list_test)
print(df_test)
-- Output
0 1 2
0 1 Apple a
1 2 Banana b
2 3 Watermelon c
3 4 Grape d
4 5 Melon e
<class 'pandas.core.frame.DataFrame'>
DataFrame은 위같은 형태의 데이터를 가지고도 만들 수 있습니다.
list_test를 보면 list 속에 여러 개의 tuple이 들어있는 형태이며, 각각의 tuple은 DataFrame에서 하나의 행에 대한 값을 가지고 있습니다.
그래서 만들어진 DataFrame을 보면 list_test의 데이터가 그대로 들어간걸 볼 수 있습니다.
다만 이렇게 DataFrame을 만들면 DataFrame의 컬럼 이름을 명시해주지 않았기 때문에 column 이름이 0, 1, 2로 매겨집니다.
import pandas as pd
list_test = [
(1, 'Apple', 'a'),
(2, 'Banana', 'b'),
(3, 'Watermelon', 'c'),
(4, 'Grape', 'd'),
(5, 'Melon', 'e')
]
df_test = pd.DataFrame(list_test, columns=['col1', 'col2', 'col3'])
print(df_test)
-- Output
col1 col2 col3
0 1 Apple a
1 2 Banana b
2 3 Watermelon c
3 4 Grape d
4 5 Melon e
<class 'pandas.core.frame.DataFrame'>
컬럼 이름을 직접 지정하고싶으면 DataFrame의 columns 옵션에 컬럼 이름을 순서대로 담고있는 list를 전달하면 됩니다.
import pandas as pd
dict_item = {
('group1', 'item_id'): [1, 2, 3, 4],
('group1', 'item_name'): ['a', 'b', 'c', 'd'],
('group2', 'price'): [1000, 2000, 3000, 4000]
}
df_item = pd.DataFrame(dict_item)
print(df_item)
print(type(df_item))
-- Output
group1 group2
item_id item_name price
0 1 a 1000
1 2 b 2000
2 3 c 3000
3 4 d 4000
<class 'pandas.core.frame.DataFrame'>
DataFrame을 만들 때 위처럼 dictionary의 key를 tuple의 형태로 묶어서 2개씩 전달하면
output DataFrame의 column index를 2줄(2차원)으로 만들 수 있습니다.
import pandas as pd
dict_item = {
('g1', 'group1', 'item_id'): [1, 2, 3, 4],
('g2', 'group1', 'item_name'): ['a', 'b', 'c', 'd'],
('g2', 'group2', 'price'): [1000, 2000, 3000, 4000]
}
df_item = pd.DataFrame(dict_item)
print(df_item)
print(type(df_item))
-- Output
g1 g2
group1 group1 group2
item_id item_name price
0 1 a 1000
1 2 b 2000
2 3 c 3000
3 4 d 4000
<class 'pandas.core.frame.DataFrame'>
tuple에 3개의 요소를 전달하면 3줄(3차원)의 column index를 만드는 것도 가능합니다.
다만 여기서 주의해야할 것은 다차원 column index를 만들려면 반드시 tuple을 사용해야합니다.
아래 예시를 보면 item_id라는 컬럼은 tuple을 쓰지 않고 명시했기 때문에 결과 DataFrame에서도 column index가 tuple 그 자체로 생성되며 2차원 index가 생성되지 않습니다.
import pandas as pd
dict_item = {
'item_id': [1, 2, 3, 4],
('group1', 'item_name'): ['a', 'b', 'c', 'd'],
('group2', 'price'): [1000, 2000, 3000, 4000]
}
df_item = pd.DataFrame(dict_item)
print(df_item)
print(type(df_item))
-- Output
item_id (group1, item_name) (group2, price)
0 1 a 1000
1 2 b 2000
2 3 c 3000
3 4 d 4000
<class 'pandas.core.frame.DataFrame'>
일단 dictionary key(DataFrame의 column 이름)를 모두 tuple로 입력해주면
tuple 속 요소 개수가 맞지 않아도 다차원 column index가 생성되며 부족한 부분은 NaN으로 column index가 생성되는 것을 볼 수 있습니다.
import pandas as pd
dict_item = {
('item_id',): [1, 2, 3, 4],
('group1', 'item_name'): ['a', 'b', 'c', 'd'],
('group2', 'price'): [1000, 2000, 3000, 4000]
}
df_item = pd.DataFrame(dict_item)
print(df_item)
print(type(df_item))
-- Output
item_id group1 group2
NaN item_name price
0 1 a 1000
1 2 b 2000
2 3 c 3000
3 4 d 4000
<class 'pandas.core.frame.DataFrame'>
'Python > Python Pandas' 카테고리의 다른 글
Python Pandas : DataFrame filtering (1) | 2020.11.04 |
---|---|
Python Pandas : merge (2개의 DataFrame join하기. DataFrame join, DataFrame left join, DataFrame right join, DataFrame outer join) (0) | 2020.11.03 |
Python Pandas : DataFrame.groupby (0) | 2020.11.02 |
Python Pandas : DataFrame.assign (0) | 2020.11.02 |
Python Pandas : DataFrame.apply & DataFrame.applymap (0) | 2020.11.02 |