728x90
목차
1. Pandas
Pandas는 데이터 처리와 분석을 위해 파이썬 프로그래밍 언어용으로 작성된 라이브러리입니다. 행과 열로 이루어진 데이터 객체를 만들어 사용할 수 있으며 주로 대용량의 빅데이터를 처리하는데 매우 편리한 라이브러리리입니다.
a. Series
- Pandas의 고유한 자료구조로서 numpy의 1차원 구조와 유사
- Series를 확인하면 index와 values 동시에 확인 가능
- 리스트의 성분 갯수는 index의 갯수와 같음
s1 = pd.Series(list('abcde'))
print(s1)
# 결과값
0 a
1 b
2 c
3 d
4 e
dtype: object
b. DataFrame
- Pandas의 고유한 자료구조로서 numpy의 2차원 구조와 유사
- DataFrame은 파이썬의 dictionary 형태의 데이터를 정의
- 키값의 갯수가 열의 갯수이고, 리스트의 성분 갯수들은 행의 갯수와 같음
- 키값은 자동으로 열의 이름으로 결정
s1 = pd.Series([x for x in range(10,20)])
s2 = pd.Series([x for x in range(100,120)])
s3 = pd.Series(list('abcdefghuijk'))
df1 = pd.DataFrame({'a': s1, 'b': s2, 'c': s3})
print(df1[:5])
# 결과값
a b c
0 10.0 100 a
1 11.0 101 b
2 12.0 102 c
3 13.0 103 d
4 14.0 104 e
- Series에 index를 지정 가능
- NaN은 Not a Number를 의미하며 해당하는 값이 없다는 뜻
s1 = pd.Series(list('abcde'), index=[x for x in range(5)])
s2 = pd.Series(list('XYZF'), index=[3,2,5,1])
df1 = pd.DataFrame({'a':s1, 'b':s2})
print(df1)
# 결과값
a b
0 a NaN
1 b F
2 c Y
3 d X
4 e NaN
5 NaN Z
- replace함수로 데이터 값 대체 가능
- replace 내에 inplace를 true로 해주면 원본 값을 바꿈
- inplace가 false면 원본은 바뀌지 않기 때문에 다시 대입
df1['a'] = df1['a'].replace(np.NaN,'xx')
df1['b'].replace(np.NAN, 'ppp', inplace=True)
print(df1)
# 결과값
a b
0 a ppp
1 b F
2 c Y
3 d X
4 e ppp
5 xx Z
2. Example
a. iris
- pandas는 주로 numpy와 같이 사용
- read_csv함수를 사용하여 DataFrame구조로 데이터를 가져오며 header에 None을 적용하면 열 이름도 index처럼 표현
import numpy as np
import pandas as pd
url ='https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
iris_df = pd.read_csv(url, header=None)
print(iris_df)
# 결과값
0 1 2 3 4
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa
.. ... ... ... ... ...
145 6.7 3.0 5.2 2.3 Iris-virginica
146 6.3 2.5 5.0 1.9 Iris-virginica
147 6.5 3.0 5.2 2.0 Iris-virginica
148 6.2 3.4 5.4 2.3 Iris-virginica
149 5.9 3.0 5.1 1.8 Iris-virginica
[150 rows x 5 columns]
- DataFrame에는 index, columns를 사용하여 index정보와 columns 정보를 얻음
- columns에 값에 열 이름 대입 가능
- head()함수는 기본적으로 상위에서 5개의 데이터를 가져오며, 매개변수로 데이터의 갯수 지정 가능
print(iris_df.index)
print(iris_df.columns)
iris_df.columns = list('abcde')
print(iris_df.head())
# 결과값
RangeIndex(start=0, stop=150, step=1)
Int64Index([0, 1, 2, 3, 4], dtype='int64')
a b c d e
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa
- insert는 새로운 열을 만들어 원하는 위치에 적용 가능
- drop은 원하는 축의 데이터 삭제 가능
iris_df.insert(2, 'x2',iris_df['a']/iris_df['b'])
print(iris_df)
iris_df_d = iris_df.drop(['a','d','e'], axis=1)
print(iris_df_d.head())
# 결과값
a b x2 c d e
0 5.1 3.5 1.457143 1.4 0.2 Iris-setosa
1 4.9 3.0 1.633333 1.4 0.2 Iris-setosa
2 4.7 3.2 1.468750 1.3 0.2 Iris-setosa
3 4.6 3.1 1.483871 1.5 0.2 Iris-setosa
4 5.0 3.6 1.388889 1.4 0.2 Iris-setosa
.. ... ... ... ... ... ...
145 6.7 3.0 2.233333 5.2 2.3 Iris-virginica
146 6.3 2.5 2.520000 5.0 1.9 Iris-virginica
147 6.5 3.0 2.166667 5.2 2.0 Iris-virginica
148 6.2 3.4 1.823529 5.4 2.3 Iris-virginica
149 5.9 3.0 1.966667 5.1 1.8 Iris-virginica
[150 rows x 6 columns]
b x2 c
0 3.5 1.457143 1.4
1 3.0 1.633333 1.4
2 3.2 1.468750 1.3
3 3.1 1.483871 1.5
4 3.6 1.388889 1.4