donut

'삭제'에 해당되는 글 1건

  1. Python Pandas DataFrame

Python Pandas DataFrame

Module/Pandas

 

 

 

안녕하세요. 오늘은 지난시간 포스팅했던 시리즈에 이어서 판다스를 이루는 자료구조 두번째 DataFrame에 대해 포스팅하겠습니다.

 

pandas

구조화된 데이터의 처리를 지원하는 파이썬 라이브러리.
파이썬으로 엑셀처럼 데이터를 다룰 수 있음.

pandas자료구조

Series와 DataFrame
DataFrame는 엑셀과 비슷한데 데이터의 형식, 행과 열이 존재함 열 : column 이라고 부름 행 : row, index라고 부름

접근순서는 열 > 행

 

DataFrame 생성

데이터의 종류

csv, xlsx파일
리스트, 딕셔너리 등등

 

DataFrame 생성

파일로 데이터 프레임을 가져올 경우에는
인덱스를 변환 해준다는 등의 데이터 전처리가 꼭 필요함.

In [4]:
#필요한 모듈 세팅
from pandas import DataFrame
from pandas import read_csv
from pandas import ExcelFile
In [6]:
#csv파일로 생성하기
csvtest = read_csv('/Users/donut/tstory/TestCsvFile.csv')
csvtest
Out[6]:
  Unnamed: 0 콜라 커피 사이다 라면 Unnamed: 5 Unnamed: 6
0 20 30 40 30 NaN NaN
1 영양도 20 20 40 40 NaN NaN
2 가격 30 22 20 10 NaN NaN
In [10]:
#엑셀파일로 생성하기
#엑셀파일로 가져올 경우, 가져오기원하는 시트를 파싱 해서 불어와야함
xlsxtest = ExcelFile('/Users/donut/tstory/TestXlsxFile.xlsx')
xlsxtest
Out[10]:
<pandas.io.excel._base.ExcelFile at 0x7fdc212a78d0>
In [11]:
df = xlsxtest.parse(xlsxtest.sheet_names[0])
df
Out[11]:
  Unnamed: 0 콜라 커피 사이다 라면
0 20 30 40 30
1 영양도 20 20 40 40
2 가격 30 22 20 10
In [66]:
# 리스트로 생성하기
testlist = [
    [1, '남자', 40, None, 64],
    [2, '여자', 30, 90, 62, 72],
    [1, '남자', 92, 70, None, None],
    [3, '여자', 63, 60, 31, 70],
    [4, '남자', 120, 50, None, 88]
]

df = DataFrame(testlist)
df
Out[66]:
  0 1 2 3 4 5
0 1 남자 40 NaN 64.0 NaN
1 2 여자 30 90.0 62.0 72.0
2 1 남자 92 70.0 NaN NaN
3 3 여자 63 60.0 31.0 70.0
4 4 남자 120 50.0 NaN 88.0
 

DataFrame 다루기

In [67]:
#데이터 프레임의 컬럼과 인덱스를 바꿔주기
df.columns = ['학년', '성별', '국어', '영어', '수학', '과학']
df.index = ['짱구', '맹구', '사탕', '도적', '검사']
df
Out[67]:
  학년 성별 국어 영어 수학 과학
짱구 1 남자 40 NaN 64.0 NaN
맹구 2 여자 30 90.0 62.0 72.0
사탕 1 남자 92 70.0 NaN NaN
도적 3 여자 63 60.0 31.0 70.0
검사 4 남자 120 50.0 NaN 88.0
In [68]:
#데이터프레임 크기 확인
#(행, 열)
dfsize = df.shape
dfsize
Out[68]:
(5, 6)
In [69]:
#행과 열 각각의 변수 저장 가능
행 , 열 = df.shape
print(행)
print(열)
 
5
6
In [70]:
#데이타 프레임 상위, 하위건 확인하기
#파라미터 생략시 5건을 생성한다.
dftop = df.head(2)
dftop
Out[70]:
  학년 성별 국어 영어 수학 과학
짱구 1 남자 40 NaN 64.0 NaN
맹구 2 여자 30 90.0 62.0 72.0
In [71]:
dflast = df.tail(2)
dflast
Out[71]:
  학년 성별 국어 영어 수학 과학
도적 3 여자 63 60.0 31.0 70.0
검사 4 남자 120 50.0 NaN 88.0
In [72]:
#dataframe index to list
#데이타프레임 인덱스를 리스트로 변환하기
dfindexlist = list(df.index)
dfindexlist
Out[72]:
['짱구', '맹구', '사탕', '도적', '검사']
In [73]:
#dataframe columns to list
#데이타프레임 컬럼을 리스트로 변환하기
dfcolumnlist = list(df.columns)
dfcolumnlist
Out[73]:
['학년', '성별', '국어', '영어', '수학', '과학']
In [74]:
#데이터의 값들만 확인하기
df.values
Out[74]:
array([[1, '남자', 40, nan, 64.0, nan],
       [2, '여자', 30, 90.0, 62.0, 72.0],
       [1, '남자', 92, 70.0, nan, nan],
       [3, '여자', 63, 60.0, 31.0, 70.0],
       [4, '남자', 120, 50.0, nan, 88.0]], dtype=object)
In [75]:
#데이터 프레임 전치구하기
df_t = df.T
df_t
Out[75]:
  짱구 맹구 사탕 도적 검사
학년 1 2 1 3 4
성별 남자 여자 남자 여자 남자
국어 40 30 92 63 120
영어 NaN 90 70 60 50
수학 64 62 NaN 31 NaN
과학 NaN 72 NaN 70 88
 

데이터 접근

In [76]:
#데이터 프레임 확인
df
Out[76]:
  학년 성별 국어 영어 수학 과학
짱구 1 남자 40 NaN 64.0 NaN
맹구 2 여자 30 90.0 62.0 72.0
사탕 1 남자 92 70.0 NaN NaN
도적 3 여자 63 60.0 31.0 70.0
검사 4 남자 120 50.0 NaN 88.0
In [77]:
#데이터 프레임을 열단위로 접근하기
df['성별']
Out[77]:
짱구    남자
맹구    여자
사탕    남자
도적    여자
검사    남자
Name: 성별, dtype: object
In [78]:
#열단위로 접근하여 그 값들을 리스트로 변환
list(df['성별'].values)
Out[78]:
['남자', '여자', '남자', '여자', '남자']
In [79]:
#데이터 프레임을 행단위로 접근하기
df.loc['짱구']
Out[79]:
학년      1
성별     남자
국어     40
영어    NaN
수학     64
과학    NaN
Name: 짱구, dtype: object
In [80]:
#데이터프레임을 행단위로 접근한 후 값을 리스트로 변환
list(df.loc['짱구'])
Out[80]:
[1, '남자', 40, nan, 64.0, nan]
 

데이터 프레임 값 바꿔주기

In [81]:
#열 -> 행 단위 접근은 에러
df.['과학','짱구'] = 100
df
 
  File "<ipython-input-81-6c54a15750ff>", line 2
    df.['과학','짱구'] = 100
       ^
SyntaxError: invalid syntax
In [82]:
#행 -> 열 단위 접근만 가능
df.loc['짱구','과학'] = 100
df
Out[82]:
  학년 성별 국어 영어 수학 과학
짱구 1 남자 40 NaN 64.0 100.0
맹구 2 여자 30 90.0 62.0 72.0
사탕 1 남자 92 70.0 NaN NaN
도적 3 여자 63 60.0 31.0 70.0
검사 4 남자 120 50.0 NaN 88.0
In [83]:
#접근하고자 하는 행이나, 
#열이 없다면 생성하여 데이터 프레임에 반영됨
df.loc['스타벅스','과학'] = 100
df
Out[83]:
  학년 성별 국어 영어 수학 과학
짱구 1.0 남자 40.0 NaN 64.0 100.0
맹구 2.0 여자 30.0 90.0 62.0 72.0
사탕 1.0 남자 92.0 70.0 NaN NaN
도적 3.0 여자 63.0 60.0 31.0 70.0
검사 4.0 남자 120.0 50.0 NaN 88.0
스타벅스 NaN NaN NaN NaN NaN 100.0
In [84]:
df.loc['커피빈','의자'] = 100
df
Out[84]:
  학년 성별 국어 영어 수학 과학 의자
짱구 1.0 남자 40.0 NaN 64.0 100.0 NaN
맹구 2.0 여자 30.0 90.0 62.0 72.0 NaN
사탕 1.0 남자 92.0 70.0 NaN NaN NaN
도적 3.0 여자 63.0 60.0 31.0 70.0 NaN
검사 4.0 남자 120.0 50.0 NaN 88.0 NaN
스타벅스 NaN NaN NaN NaN NaN 100.0 NaN
커피빈 NaN NaN NaN NaN NaN NaN 100.0
 

이 포스팅은 이젠아이티 주호쌤에게 강의를 듣고 복습하며 작성하였습니다.

In [ ]:
 

'Module > Pandas' 카테고리의 다른 글

파이썬 3차원 배열 다루기  (0) 2020.08.02
Python pandas series  (0) 2020.07.19