본문 바로가기
Language/파이썬

파이썬 '판다스 데이터 분석' - 엑셀 파일 읽기 (xlsx, csv), 여러 엑셀 파일 읽기,캐글 제출을 위한 DataFrame

by javapp 자바앱 2021. 7. 5.
728x90

판다

판다스는 다양한 형태의 외부 파일을 읽어와서 데이터프레임으로 변환하는 함수를 제공한다.

그 중에서 엑셀 파일 중심으로 읽어오는 것을 목표로 한다.

 

.read_xxx() 함수에 여러 옵션을 추가 할 수 있다.

dtype='unicode'


 

기본

danawa_data.xlsx
0.01MB

import pandas as pd

df = pd.read_excel('data/danawa_data.xlsx')
df.head()

 

가격에 콤마 없애기

import pandas as pd

df = pd.read_excel('data/danawa_data.xlsx',thousands = ',')
df.head()

https://rfriend.tistory.com/463

 

[Python pandas] DataFrame에서 천 단위 숫자의 자리 구분 기호 콤마(',')를 없애는 방법

이번 포스팅에서는 Python pandas DataFrame의 숫자형 변수에서 천 단위 숫자의 자리 구분 기호인 콤마(',')를 없애는 2가지 방법을 소개하겠습니다. 예제로 사용할 데이터셋은 Wikipedia 에서 찾은 per capit

rfriend.tistory.com

 

 


header = 1 

- 1행을 열 이름 으로 지정

df = pd.read_excel('data/danawa_data.xlsx',header=1)
df.head()


header = None

- 행을 열 이름으로 지정하지 않음

df = pd.read_excel('data/danawa_data.xlsx',header=None)
df.head()


index_col = '속성명'

- 인덱스 지정

df = pd.read_excel('data/danawa_data.xlsx',index_col='카테고리')
df.head()


skiprows = [...]

- 처음 몇 줄을 스킵할 것인지 설정

ex) [1,2,3]

df = pd.read_excel('data/danawa_data.xlsx',header=None,skiprows=[0])
df.head()


read_csv()

df2=pd.read_csv('data/auto-mpg.csv')
df2.tail()

 


여러데이터 읽기

apt_files = glob('data/서울_연립다세대_매매/연립*.csv')

tmp_raw=[]
for file_name in apt_files:
    tmp = pd.read_csv(file_name, header=15,encoding='cp949',thousands=',')
    tmp_raw.append(tmp)
df = pd.concat(tmp_raw)
df.info()

 

import pandas as pd
import numpy as np
import os

forders = os.listdir('../data/상권배후지추정매출')

df_all_years = pd.DataFrame()
for i in range(0,len(forders)):
    path = '../data/상권배후지추정매출/'+forders[i]
    df= pd.read_csv(path,encoding='cp949',thousands = ',') 
    df_all_years = pd.concat([df_all_years, df])
df_all_years.head()

 


 

캐글

위 사진처럼 캐글의 데이터프레임 포맷에 맞추어 submission.csv 을 생성하려고 한다.

타이타닉 데이터로 LogisticRegression을 통해 생성된 Survived 컬럼을 가진 y_pred와 PassengerId 을 id 하여 제출해야 한다고 가정 

titanic.csv
0.06MB

import pandas as pd
import numpy as np

path = 'data/titanic.csv'
titanic = pd.read_csv(path, index_col='PassengerId')
titanic.head()

# ...
feature_cols = ['Pclass', 'Parch']
X = titanic[feature_cols]
y = titanic.Survived

#...

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=123)

from sklearn.linear_model import LogisticRegression

logreg = LogisticRegression(C=1000)
logreg.fit(X_train, y_train)
print(list(zip(feature_cols, logreg.coef_[0])))

# class predictions (not predicted probabilities)
y_pred_class = logreg.predict(X_test)

 

t_df = X_test.reset_index()
pid = t_df['PassengerId']
pid

<결과>
0        1
1        2
2        3
3        4
4        5
      ... 
218    219
219    220
220    221
221    222
222    223
Name: PassengerId, Length: 223, dtype: int64
y_pred_=pd.Series(y_pred_class)
y_pred_

<결과>
0      0
1      0
2      1
3      1
4      0
      ..
218    0
219    0
220    0
221    1
222    0
Length: 223, dtype: int64
sub = pd.DataFrame(data = {'id':pid, 'Survived':y_pred_})
sub

<결과>
	id	Survived
0	1	0
1	2	0
2	3	1
3	4	1
4	5	0
...	...	...
218	219	0
219	220	0
220	221	0
221	222	1
222	223	0
sub.to_csv('submission.csv',index=False)

댓글