달나라 노트

Python Pandas : pandas.read_excel & pandas.read_csv (xlsx 파일 DataFrame으로 만들기, csv 파일 DataFrame으로 만들기, xlsb 파일 DataFrame으로 만들기, read_csv encoding cp949, euc-kr) 본문

Python/Python Pandas

Python Pandas : pandas.read_excel & pandas.read_csv (xlsx 파일 DataFrame으로 만들기, csv 파일 DataFrame으로 만들기, xlsb 파일 DataFrame으로 만들기, read_csv encoding cp949, euc-kr)

CosmosProject 2020. 11. 9. 14:45
728x90
반응형

 

 

 

pandas.read_excel &emp; pandas.read_csv

read_excel은 .xlsx 파일을 읽어 DataFrame의 형태로 가져오는 기능을 제공합니다.

read_csv는 .csv 파일을 읽어 DataFrame의 형태로 가져오는 기능을 제공합니다.




엑셀을 실행하여 다음과 같은 데이터를 입력한 후 test.xlsx, test.csv라는 이름으로 동일한 데이터를 가진 2개의 파일을 생성하였습니다.




각각의 파일은 root directory(~/)의 Documents 폴더해 저장해놨기 때문에 경로를 이처럼 지정해주고 아래처럼 read_excel과 read_csv를 이용하여 파일을 읽어봅시다.

xlsx_dir = '~/Documents/test.xlsx'
csv_dir = '~/Documents/test.csv'

df_xlsx = pd.read_excel(xlsx_dir, sheet_name='Sheet1')
df_csv = pd.read_csv(csv_dir, sep=',')

print(df_xlsx)
print(type(df_xlsx))

print(df_csv)
print(type(df_csv))
 
- Output
   col1 col2  col3
0     1    a  11.0
1     2    b   NaN
2     3    c  13.0
3     4  NaN  14.0
4     5    e  15.0
<class 'pandas.core.frame.DataFrame'>

   col1 col2  col3
0     1    a  11.0
1     2    b   NaN
2     3    c  13.0
3     4  NaN  14.0
4     5    e  15.0
<class 'pandas.core.frame.DataFrame'>
  

일단 파일이 잘 읽혀져왔음을 알 수 있습니다.

 

몇 가지 특징을 살펴보면

1. read_excel의 경우 xlsx 파일을 읽는데 xlsx파일은 여러 개의 시트(흔히 탭이라고도 하죠)를 가질 수 있으므로 내가 읽어올 시트이름을 sheet_name 옵션에 명시해줬습니다.

 

2. read_csv의 경우 csv 파일을 읽는데 csv 파일은 단 하나의 시트만 가질 수 있으므로 sheet_name 옵션은 없습니다.

다만 csv파일을 생성할 때 컬럼 구분자(separator)를 콤마(,)로 하였으므로 read_csv의 sep옵션에 구분자를 콤마로 적었습니다.

 

3. read_excel, reac_csv 모두 가장 상단에 있는 컬럼이 DataFrame의 column_name으로 설정되었습니다.

 

4. 원본 파일에 비어있는 칸이 있었는데 이것은 NaN으로 표시됩니다. 값이 없다는 뜻입니다.

 

5. 원본 파일에 index를 지정해주는 것은 없었으며 결과 DataFrame에는 row index가 0부터 차례대로 매겨집니다.




usecols 옵션을 이용하면 아래처럼 파일에 있는 모든 데이터가 아니라 원하는 컬럼들만 추출할 수 있습니다.

xlsx_dir = '~/Documents/test.xlsx'
csv_dir = '~/Documents/test.csv'

df_xlsx = pd.read_excel(xlsx_dir, sheet_name='Sheet1', usecols=['col1', 'col2'])
df_csv = pd.read_csv(csv_dir, sep=',', usecols=['col2', 'col3'])

print(df_xlsx)
print(type(df_xlsx))

print(df_csv)
print(type(df_csv))
 
- Output
   col1 col2
0     1    a
1     2    b
2     3    c
3     4  NaN
4     5    e
<class 'pandas.core.frame.DataFrame'>

  col2  col3
0    a  11.0
1    b   NaN
2    c  13.0
3  NaN  14.0
4    e  15.0
<class 'pandas.core.frame.DataFrame'>
  



usecols 옵션을 이용할 때 컬럼 이름이 아니라 아래 예시처럼 컬럼의 index(첫 컬럼은 0 그 다음부터 1씩 증가)를 입력해서 동일한 기능을 사용할 수 있습니다.

xlsx_dir = '~/Documents/test.xlsx'
csv_dir = '~/Documents/test.csv'

df_xlsx = pd.read_excel(xlsx_dir, sheet_name='Sheet1', usecols=[0, 1])
df_csv = pd.read_csv(csv_dir, sep=',', usecols=[1, 2])

print(df_xlsx)
print(type(df_xlsx))

print(df_csv)
print(type(df_csv))
 
- Output
   col1 col2
0     1    a
1     2    b
2     3    c
3     4  NaN
4     5    e
<class 'pandas.core.frame.DataFrame'>

  col2  col3
0    a  11.0
1    b   NaN
2    c  13.0
3  NaN  14.0
4    e  15.0
<class 'pandas.core.frame.DataFrame'>
  




na_values 옵션을 이용하면 원하는 값을 NaN으로 변환시켜 출력할 수 있습니다.

 

아래 예시의 결과를 보면 index=0, col2의 값이 'a'였는데 이것이 na_values옵션에 의해 NaN으로 변경되어 반환되었음을 알 수 있습니다.

xlsx_dir = '~/Documents/test.xlsx'
csv_dir = '~/Documents/test.csv'

df_xlsx = pd.read_excel(xlsx_dir, sheet_name='Sheet1', na_values='a')
df_csv = pd.read_csv(csv_dir, sep=',', na_values='a')

print(df_xlsx)
print(type(df_xlsx))

print(df_csv)
print(type(df_csv))
 
- Output
   col1 col2  col3
0     1  NaN  11.0
1     2    b   NaN
2     3    c  13.0
3     4  NaN  14.0
4     5    e  15.0
<class 'pandas.core.frame.DataFrame'>

   col1 col2  col3
0     1  NaN  11.0
1     2    b   NaN
2     3    c  13.0
3     4  NaN  14.0
4     5    e  15.0
<class 'pandas.core.frame.DataFrame'>
  




skiprows 옵션을 이용하면 원본 xlsx 또는 csv 파일에서 위에서부터 몇 개의 행을 무시하고 파일을 읽을지 설정할 수 있습니다.

 

아래 예시를 보면 파일에서 2개의 행을 무시한다는 뜻으로 skiprows 값을 2로 설정했습니다.

 

그렇게 되면 2개의 행을 무시한 후 가장 상단에 존재하게 되는 원본 파일의 3번째 행이 DataFrame의 컬럼 이름이 되고 그보다 아래의 행들이 DataFrame을 구성합니다.

 

세 번째 행에서 col3의 데이터가 공백이었으므로 컬럼 이름도 unnamed로 표시되는 것을 볼 수 있고,

Unnmaed 옆 2는 column index가 2라는 뜻입니다.

xlsx_dir = '~/Documents/test.xlsx'
csv_dir = '~/Documents/test.csv'

df_xlsx = pd.read_excel(xlsx_dir, sheet_name='Sheet1', skiprows=2)
df_csv = pd.read_csv(csv_dir, sep=',', skiprows=2)

print(df_xlsx)
print(type(df_xlsx))

print(df_csv)
print(type(df_csv))
 
- Output
   2    b  Unnamed: 2
0  3    c          13
1  4  NaN          14
2  5    e          15
<class 'pandas.core.frame.DataFrame'>

   2    b  Unnamed: 2
0  3    c          13
1  4  NaN          14
2  5    e          15
<class 'pandas.core.frame.DataFrame'>
  




 

 

 

 

 

 

 

만약 읽으려는 파일이 xlsb라면 아래처럼 engine을 명시해줘야합니다.

xlsb_dir = '~/Documents/test.xlsb'

df_xlsb = pd.read_excel(xlsb_dir, sheet_name='Sheet1', skiprows=2, engine='pyxlsb')

print(df_xlsb)
print(type(df_xlsb))
 
- Output
   2    b  Unnamed: 2
0  3    c          13
1  4  NaN          14
2  5    e          15
<class 'pandas.core.frame.DataFrame'>

  

 

 

 

 

 

 

728x90
반응형
Comments