3 분 소요

Data Frame (Pandas)

pandas의 Dataframe 구조는 Index-Column-Value 의 형태로 이루어진 데이터 구조로서, 비즈니스에서 가장 많이 사용되어지는 기본적인 데이터 구조이다.
DateFrame을 사용함으로서 Series 구조보다 시각적으로나 기능적으로 훨씬 개선된 방식으로 데이터를 관리할 수 있다.
다른 시스템과 연동이 쉬우며, 데이터 전처리에서 강력한 모습을 보여준다.

DataFrame 생성

기본 생성

import pandas as pd

df1 = pd.DataFrame([10,20,30,40,50])
df1
0
0 10
1 20
2 30
3 40
4 50
df2= pd.DataFrame([[10,20,30,40,50],['A','B','C','D','F']])
df2
0 1 2 3 4
0 10 20 30 40 50
1 A B C D F

DataFrame() 함수를 통해 데이터 프레임 객체를 만들 수 있다.
매개 값으로 단일 리스트를 주어지게 된다면 열로 들어가게 되고, 이중 리스트의 경우 각 리스트 하나 하나가 행으로서 입력 된다.

column 과 index를 포함한 생성

df3= pd.DataFrame([['윤정호','1995-03-03','수원','동국대',5000],
                   ['홍길동','1997-07-07','서울','서울대',4000],
                   ['스미스','1999-09-09','뉴욕','하버드',2000],
                   ['나카무라','1990-04-04','도쿄','동경대',3000]],
                  columns=['이름','생년월일','거주지','학교','재산(만)'],
                  index=['1번','2번','3번','4번'])
df3
이름 생년월일 거주지 학교 재산(만)
1번 윤정호 1995-03-03 수원 동국대 5000
2번 홍길동 1997-07-07 서울 서울대 4000
3번 스미스 1999-09-09 뉴욕 하버드 2000
4번 나카무라 1990-04-04 도쿄 동경대 3000

series 구조와 dataframe 사이에서 가장 확연하게 드러나는 차이는 Column의 유무이다.
dataframe 함수 안에 columns=[] 형태로 칼럼명을 설정해줄 수 있다.
만약 따로 설정해주지 않는다면 기본 값은 0부터 차례대로 정수가 들어가게 된다.

데이터 정보 확인

df3.shape
(4, 5)

.shape 를 통해 행(데이터)의 개수와 열(칼럼)의 개수를 알 수 있다.
(행,열) 순으로 출력된다.

df3.info()
<class 'pandas.core.frame.DataFrame'>
Index: 4 entries, 1번 to 4번
Data columns (total 5 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   이름      4 non-null      object
 1   생년월일    4 non-null      object
 2   거주지     4 non-null      object
 3   학교      4 non-null      object
 4   재산(만)   4 non-null      int64 
dtypes: int64(1), object(4)
memory usage: 352.0+ bytes

.info() 함수를 통해 데이터의 타입과 데이터의 개수등 다양한 정보를 얻을 수 있다.
해당 정보들을 통해 데이터의 문제점을 파악할 수 있다.

df3.describe()
재산(만)
count 4.000000
mean 3500.000000
std 1290.994449
min 2000.000000
25% 2750.000000
50% 3500.000000
75% 4250.000000
max 5000.000000

.describe() 함수를 통해 숫자로 이루어진 데이터(연속형 데이터)들에 한하여 다섯수치요약(five number summary)을 가져 올 수 있다.
해당 정보를 이용해 데이터의 문제점을 파악 가능하다.

ex)비정상적으로 높은 최댓값, 50% 와 평균값의 큰 차이

df3.isnull()
이름 생년월일 거주지 학교 재산(만)
1번 False False False False False
2번 False False False False False
3번 False False False False False
4번 False False False False False

isnull을 통해 데이터의 결측치 (Missing Data)의 존재 여부를 확인 할 수 있다.
True 일 경우 결측치가 존재한다는 것을 의미한다.

df3.isnull().sum()
이름       0
생년월일     0
거주지      0
학교       0
재산(만)    0
dtype: int64

isnull에 sum을 을 같이 사용하여 한 눈에 결측치의 존재 여부와 양을 알 수 있다.

기본적인 데이터 추출과 연산

df3.head()
df3.tail()

.head()와 .tail() 을 통해 각각 상위 5개 하위 5개 데이터를 확인 할 수 있다.

df3['이름']

1번     윤정호
2번     홍길동
3번     스미스
4번    나카무라
Name: 이름, dtype: object

dataframe에서 칼럼명을 기준으로 데이터를 탐색할 수 있다.
데이터 타입은 칼럼(열)을 기준으로 각각의 타입을 갖게 된다.
위의 코드처럼 하나의 대괄호 안에 칼럼명을 입력하면 series형태로 데이터를 출력해준다.

df3[['이름']]
이름
1번 윤정호
2번 홍길동
3번 스미스
4번 나카무라

series 형태가 아닌 dataframe의 형태로 결과를 받아보고 싶다면 중첩된 대괄호를 이용하여 찾고 싶은 값을 입력해주면 된다.

#df3['이름','생년월일'] 오류 발생
df3[['이름','생년월일']]
이름 생년월일
1번 윤정호 1995-03-03
2번 홍길동 1997-07-07
3번 스미스 1999-09-09
4번 나카무라 1990-04-04

2가지 이상의 복수의 칼럼을 가져오고 싶을 때는 series로는 표현할 수 없기 때문에 dataframe의 구조로만 가져올 수 있다.
따라서 중첩된 대괄호의 형태로 값을 입력하여야 한다.

print(df3['재산(만)'].sum())
print(df3['재산(만)'].mean())
14000
3500.0

series와 마찬가지로 여러 함수들을 이용해 연산을 할 수 있다.

저장

Pandas는 파일 관리를 할 수 있는 여러 기능을 포함하고 있다. 데이터를 생성했으니 파일로서 저장해보자.

df3.to_csv("Pandas_learn.csv")

#df.to_excel("test.xlsx") 엑셀 형태로 저장
#df.to_pickle("df.pkl") 피클 형태로 저장
"""
  SQLite3 DB로 저장하기

  con = sqlite3.connect("test.db")

  df.to_sql("table_name", con, if_exists="append", index=False)

  con.close()

  # 데이터프레임을 html표로 바꾸기

  df.to_html()



  # html 파일로 저장하기

  df.to_html("test.html")
"""


'\n  SQLite3 DB로 저장하기\n\n  con = sqlite3.connect("test.db")\n\n  df.to_sql("table_name", con, if_exists="append", index=False)\n\n  con.close()\n\n  # 데이터프레임을 html표로 바꾸기\n\n  df.to_html()\n\n\n\n  # html 파일로 저장하기\n\n  df.to_html("test.html")\n'

파일 장소 지정은 파일명 앞에 저장할 위치를 지정해주면 된다.

댓글남기기