Pandas Data Structure
Pandas library는 주로 숫자에 특화된 Numpy에 비해 더 일반적으로 다양한 data type을 다룰 수 있는 tool입니다.
Series형 Pandas Data Structure(PDS)
pd.Series() class 생성자에 입력 인자로 Python list나 dictionary를 넣어 실행시켜 instance(class)를 만듭니다.
>> import pandas as pd;
>> ds1 = pd.Series([4, 2, 1])
>> ds1
0 4
1 2
2 1
dtype: int64
>> ds1.values
array([4, 2, 1])
>> ds1.index
RangeIndex(start=0, stop=3, step=1)
indexing 방법은 Numpy와 비슷하지만 (링크), 완전히 동일하지는 않다. 예를 들어, index를 -1로 해서 마지막 요소를 찾을 수는 없다.
>> ds1[[0,2]]
0 4
2 1
dtype: int64
>> ds1[-1] (X)
- 변경/추가
>> ds1[2] = -1; ds1 # idx 2번 value 변경
0 4
1 2
2 -1
dtype: int64
>> ds1[4] = 3.; ds1 # idx 4번 추가
0 4.0
1 2.0
2 -1.0
4 3.0
dtype: float64
두 번째 예에서 새로운 요소를 실수형으로 추가하면 모든 요소들의 type이 float64로 변경되는 것을 알 수 있다. 모든 요소들이 숫자인 series pds에서는 어떤 조건을 만족시키는 요소들만 골라내거나 일률적인 산술 연산을 하기가 매우 쉽다.
>> ds1[ds1>2]
0 4.0
4 3.0
dtype: float64
모든 요소들이 다 실수인 series pds는 NumPy 함수를 사용하는 산술적 연산도 가능합니다.
아래는 ds1의 모든 요소들에 대한 지수함수값을 구하기 위해 np 함수를 사용합니다.
>> np.exp(ds1)
0 54.598150
1 7.389056
2 0.367879
4 20.085537
dtype: float64
default로 들어가는 index array가 아닌 다른 index array를 넣을 수도 있습니다.
>> ds2 = pd.Series([4, 2, -1, 3], index=['b', 'c', 'a', 'd']); ds2
b 4
c 2
a -1
d 3
dtype: int64
dictionary도 중첩 구조가 아니며 모든 Key에 대한 value 요소들의 개수가 동일하다면 series pds로 변환할 수 있습니다.
>> dic1 = {'2015': [36, -15.5], '2016':[36.6, -15], '2017':[35.4, -14]}; dic1
>> ds3 = pd.Series(dic1); ds3
2015 [36, -15.5]
2016 [36.6, -15]
2017 [35.4, -14]
dtype: object
DataFrame형 Pandas Data Structure(PDS)
daataframe-pds는 여러 개의 column으로 구성된 표와 비슷하며, 각 column별 type을 다르게 할 수 있습니다.
구성하는 방법은 총 세 가지 입니다.
첫 번째 방법)
value를 np.array()의 입력인자로 넣고, column label로 구성된 list를 만든 다음 DataFrame() class 생성자를 사용해서 instance(class)를 생성합니다.
참고로, series 형과 dataframe형 모두 pds를 ndarray로 바꾸고 싶다면 .to_numpy() method를 사용하면 됩니다.
>> npa1 = df1.to_numpy();
두 번째 방법) dictionary를 DataFrame() class 생성자에 입력인자로 넣는다.
dic2 = {'Name': ['Tom','Judy','Fred'],
'State': ['NY','CA','PA'],
'Age': [45,36,21],
'Gender': ['M','F','M']}
df2 = pd.DataFrame(dic2); df2
참고로, row index를 지정하려면 index 인자 값으로 넣어주면 됩니다.
df2 = pd.DataFrame(dic2, index=[1,2,3]); df2
세 번째 방법) nested dictinary를 사용한다.
dic3 = {'Name': {11:'Tom', 12:'Judy', 13:'Fred'},
'State': {11:'NY', 12:'CA', 13:'PA'},
'Age': {11:45, 12:36, 13:21},
'Gender': {11:'M', 12:'F', 13:'M'}}
df3 = pd.DataFrame(dic3)
dataframe-psd에는 .value/.column/.index 속성과 index와 column label을 함께 볼 수 있는 .axes 속성이 있습니다.
>> df3.values
array([['Tom', 'NY', 45, 'M'],
['Judy', 'CA', 36, 'F'],
['Fred', 'PA', 21, 'M']], dtype=object)
>> df3.columns
['Name', 'State', 'Age', 'Gender']
>> list(df3.index)
[11, 12, 13]
>> df3.axes
[Int64Index([11, 12, 13], dtype='int64'),
Index(['Name', 'State', 'Age', 'Gender'], dtype='object')]
References
Python(파이썬)과 Matplotlib, Numpy, Pandas - 양원영, 고병천 외 3명
'프로그래밍 언어' 카테고리의 다른 글
Python Pandas - pivot() (0) | 2023.02.06 |
---|---|
Python pandas - DataFrame PDS 함수 (0) | 2023.01.29 |
Python NumPy (2) 특수한 Array, reshape, dimension, copy, nan (1) | 2023.01.24 |
Python Numpy - Array 1D, 2D, 3D (0) | 2023.01.22 |
Python NumPy (1) Array, Indexing, Sorting (0) | 2023.01.22 |
댓글