In [1]:
from IPython.display import display, HTML
display(HTML("<style>.container { width:90% !important; }</style>"))
# 코드 입력창의 너비를 조정하는 코드입니다.
Pandas의 특징¶
- 파이썬 언어로 제작된 데이터 조작과 분석을 위한 라이브러리.
- 기본적인 통계데이터 제공.
- NaN values를 알아서 처리한다.
- 데이터셋들을 merge 할 수 있다.
Panas Series¶
판다스의 1차원 데이터를 시리즈라고 부른다
In [2]:
# pandas 라이브러리 임포트
import pandas as pd
In [3]:
data = [30, 6, 'Yes', 'No']
In [4]:
# 시리즈를 만든다
x = pd.Series(data= data)
In [5]:
x
Out[5]:
0 30 1 6 2 Yes 3 No dtype: object
In [7]:
# 인덱스 확인
x.index
Out[7]:
RangeIndex(start=0, stop=4, step=1)
In [8]:
# 데이터 확인
x.values # ndarray
Out[8]:
array([30, 6, 'Yes', 'No'], dtype=object)
In [6]:
# 인덱스에 이름 붙이기
index = ['eggs', 'apples', 'milk', 'bread']
In [7]:
groceries = pd.Series(data= data, index= index)
In [8]:
groceries
Out[8]:
eggs 30 apples 6 milk Yes bread No dtype: object
In [9]:
groceries.index
Out[9]:
Index(['eggs', 'apples', 'milk', 'bread'], dtype='object')
In [10]:
groceries.values
Out[10]:
array([30, 6, 'Yes', 'No'], dtype=object)
In [11]:
# shape 확인
groceries.shape
Out[11]:
(4,)
In [12]:
# 차원 확인
groceries.ndim
Out[12]:
1
In [13]:
# 데이터 갯수
groceries.size
Out[13]:
4
In [14]:
# 저장된 데이터의 타입 확인
groceries.dtype # ('O') => object (문자열)
Out[14]:
dtype('O')
In [15]:
# 'apples' 가 groceries 안에 들어있나?
'apples' in groceries
Out[15]:
True
In [16]:
# 'Yes' 가 groceries 안에 들어있나?
'Yes' in groceries.values
Out[16]:
True
In [ ]:
판다스 시리즈의 Indexing, Slicing¶
In [18]:
groceries
Out[18]:
eggs 30 apples 6 milk Yes bread No dtype: object
In [19]:
groceries[0]
Out[19]:
30
In [20]:
groceries['eggs']
Out[20]:
30
In [21]:
groceries[-1]
Out[21]:
'No'
In [22]:
groceries['bread']
Out[22]:
'No'
In [23]:
groceries[ ['eggs', 'bread'] ]
Out[23]:
eggs 30 bread No dtype: object
In [24]:
groceries['apples' : 'bread'] # index 이름으로 억세싱할때는 끝부분에 +1 하지 않는다
Out[24]:
apples 6 milk Yes bread No dtype: object
In [25]:
groceries[1: ]
Out[25]:
apples 6 milk Yes bread No dtype: object
In [26]:
groceries[ : 'milk']
Out[26]:
eggs 30 apples 6 milk Yes dtype: object
판다스 시리즈의 산수연산¶
In [27]:
index = ['apples', 'oranges', 'bananas']
data = [10, 6, 3,]
In [28]:
fruits = pd.Series(data= data, index= index)
In [29]:
fruits
Out[29]:
apples 10 oranges 6 bananas 3 dtype: int64
In [30]:
# 전체 5개씩 증가되었다.
fruits = fruits + 5
In [31]:
fruits
Out[31]:
apples 15 oranges 11 bananas 8 dtype: int64
In [32]:
# 오렌지가 2개 팔렸다
fruits['oranges'] = fruits['oranges'] - 2
In [33]:
fruits
Out[33]:
apples 15 oranges 9 bananas 8 dtype: int64
In [34]:
# 사과랑 바나나가 3개씩 팔렸다
fruits[ ['apples', 'bananas'] ] = fruits[ ['apples', 'bananas'] ] - 3
In [35]:
fruits
Out[35]:
apples 12 oranges 9 bananas 5 dtype: int64
In [36]:
# 불리언 인덱싱
fruits[fruits > 7]
Out[36]:
apples 12 oranges 9 dtype: int64
In [ ]:
Pandas Dataframe¶
판다스의 2차원 데이터 처리는 데이터프레임으로 한다.
데이터 분석에서는 csv 파일을 데이터프레임으로 읽어와서 작업한다.
In [37]:
import pandas as pd
# We create a dictionary of Pandas Series
items = {'Bob' : pd.Series(data = [245, 25, 55], index = ['bike', 'pants', 'watch']),
'Alice' : pd.Series(data = [40, 110, 500, 45], index = ['book', 'glasses', 'bike', 'pants'])}
In [38]:
# 데이터프레임 만들기
df = pd.DataFrame(data= items)
In [39]:
df
Out[39]:
Bob | Alice | |
---|---|---|
bike | 245.0 | 500.0 |
book | NaN | 40.0 |
glasses | NaN | 110.0 |
pants | 25.0 | 45.0 |
watch | 55.0 | NaN |
- 왼쪽의 행부분의 진한 글씨 : index
- 위쪽의 열부분의 진한 글씨 : column
- 안쪽에 있는 데이터 : values
- NaN은 해당 항목에 값이 없음을 뜻한다 (Not a Number)
In [40]:
df.index
Out[40]:
Index(['bike', 'book', 'glasses', 'pants', 'watch'], dtype='object')
In [41]:
df.columns
Out[41]:
Index(['Bob', 'Alice'], dtype='object')
In [42]:
df.values
Out[42]:
array([[245., 500.], [ nan, 40.], [ nan, 110.], [ 25., 45.], [ 55., nan]])
In [43]:
df.shape
Out[43]:
(5, 2)
In [44]:
df.ndim
Out[44]:
2
In [45]:
df.size
Out[45]:
10
In [46]:
df.info() # info() 함수는 데이터에 대한 전반적인 정보를 알려준다
<class 'pandas.core.frame.DataFrame'> Index: 5 entries, bike to watch Data columns (total 2 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Bob 3 non-null float64 1 Alice 4 non-null float64 dtypes: float64(2) memory usage: 120.0+ bytes
dataframe을 csv 파일로 저장하기¶
to_csv() 로 데이터프레임을 csv파일로 저장할 수 있다.
괄호 안에는 저장할 경로를 입력한다.
In [49]:
df = pd.DataFrame(data= items)
In [52]:
df
Out[52]:
Bob | Alice | |
---|---|---|
bike | 245.0 | 500.0 |
book | NaN | 40.0 |
glasses | NaN | 110.0 |
pants | 25.0 | 45.0 |
watch | 55.0 | NaN |
In [51]:
df.to_csv('test.csv')
csv 파일을 dataframe으로 불러오기¶
read_csv로 csv파일을 불러와 데이터프레임으로 만든다.
괄호 안에는 저장되어 있는 경로를 입력한다.
In [53]:
df2 = pd.read_csv('test.csv')
In [54]:
df2
Out[54]:
Unnamed: 0 | Bob | Alice | |
---|---|---|---|
0 | bike | 245.0 | 500.0 |
1 | book | NaN | 40.0 |
2 | glasses | NaN | 110.0 |
3 | pants | 25.0 | 45.0 |
4 | watch | 55.0 | NaN |
인덱스로 저장되어 있던 열이 분리되어 하나의 컬럼이 되었다.
첫번째 열인 Unnamed: 0를 인덱스로 지정해주고 싶으면
read_csv() 함수를 호출할 때, 파라미터에 index_col=0(위치)나
index_col='Unnamed: 0' 처럼 직접 변수 이름을 지정해주면 된다.
In [55]:
df3 = pd.read_csv('test.csv', index_col = 'Unnamed: 0')
In [56]:
df3
Out[56]:
Bob | Alice | |
---|---|---|
bike | 245.0 | 500.0 |
book | NaN | 40.0 |
glasses | NaN | 110.0 |
pants | 25.0 | 45.0 |
watch | 55.0 | NaN |
'Python > Pandas' 카테고리의 다른 글
Pandas 활용(6) - 범주로 묶어 집계하기 groupby, agg (0) | 2022.11.27 |
---|---|
Pandas 활용(5) - 결측값(NaN) 처리 (0) | 2022.11.27 |
Pandas 활용(4) - 인덱스명, 컬럼명 변경 (0) | 2022.11.27 |
Pandas 활용(3) - 데이터프레임의 데이터 변경, 추가, 삭제 (0) | 2022.11.25 |
Pandas 활용(2) - 데이터프레임의 Indexing, Slicing (0) | 2022.11.25 |