2020年4月19日日曜日

【pandas】テキスト・csv・エクセルファイルの読み込み

 データ分析用ライブラリpandasはPythonでデータ分析を行う際に一般的に用いられるライブラリ。pandasでは表構造をしたデータフレームオブジェクトを操作しデータ分析を行う。この記事ではテキストファイル、csvファイル、エクセルファイルなどの外部ファイルを読み込んでデータフレームに変換する方法を解説する。

ライブラリpandasを使うにはインポートが必要。通常次のようにpdという名前でインポートされる。

import pandas as pd


1. テキストファイルの読み込み

 各項目がカンマで区切られた次のテキストファイル'table.txt'を読み出す場合。

country,area,population,GDP
USA,9628000,327830000,204128
China,9634057,1395380000,136000
Russia,17098246,146804400,20968
Japan,377975,126160000,54130


 テキストファイル読み込みにはread_tableを用いる。区切り文字','を引数sepで指定する。

import pandas as pd

df = pd.read_table('table.txt', sep=',')
print(df)

実行結果

   country     area  population    GDP
0      USA  9628000   327830000 204128 
1    China  9634057  1395380000 136000  
2   Russia 17098246   146804400  20968  
3    Japan   377975   126160000  54130 


 次のファイル(table.txt)のように日本語が含まれる場合も、Pythonの標準文字コードであるUTF-8で保存されていれば問題なく読み出せる。

国,面積,人口,GDP
アメリカ,9628000,327830000,204128
中国,9634057,1395380000,136000
ロシア,17098246,146804400,20968
日本,377975,126160000,54130


import pandas as pd

df = pd.read_table('table.txt', sep=',')
print(df)

実行結果

        国     面積        人口    GDP
0 アメリカ  9628000   327830000 204128 
1     中国  9634057  1395380000 136000  
2   ロシア 17098246   146804400  20968  
3     日本   377975   126160000  54130 


 UTF-8以外の文字コードで保存されたテキストファイルを読み出すとエラーになる場合がある。

import pandas as pd

df = pd.read_table('table.txt', sep=',')
print(df)

実行結果

'utf-8' codec can't decode byte 0x8d in position 0: invalid start byte


 これを回避するにはencoding='SHIFT-JIS'またはencoding='cp932'とエンコードを与えるかengine='python'としてエンコードエンジンを指定する(デフォルトはengine='c')。

encoding='SHIFT-JIS'を指定した場合。

import pandas as pd

df = pd.read_table('table.txt', sep=',' encoding='SHIFT-JIS')
print(df)

実行結果

        国     面積        人口    GDP
0 アメリカ  9628000   327830000 204128 
1     中国  9634057  1395380000 136000  
2   ロシア 17098246   146804400  20968  
3     日本   377975   126160000  54130 


encoding='cp932'を指定した場合。

import pandas as pd

df = pd.read_table('table.txt', sep=',' encoding='cp932')
print(df)

実行結果

        国     面積        人口    GDP
0 アメリカ  9628000   327830000 204128 
1     中国  9634057  1395380000 136000  
2   ロシア 17098246   146804400  20968  
3     日本   377975   126160000  54130 


engine='python'を指定した場合。

import pandas as pd

df = pd.read_table('table.txt', sep=',' engine='python')
print(df)

実行結果

        国     面積        人口    GDP
0 アメリカ  9628000   327830000 204128 
1     中国  9634057  1395380000 136000  
2   ロシア 17098246   146804400  20968  
3     日本   377975   126160000  54130 


2. CSVファイルの読み込み

 CSVファイルの読み出しにはread_csvを用いる。

 次のCSVファイル'table.csv'を読み出す場合。

country,area,population,GDP
USA,9628000,327830000,204128
China,9634057,1395380000,136000
Russia,17098246,146804400,20968
Japan,377975,126160000,54130


import pandas as pd

df = pd.read_csv('table.csv')
print(df)  

実行結果

   country     area  population    GDP
0      USA  9628000   327830000 204128 
1    China  9634057  1395380000 136000  
2   Russia 17098246   146804400  20968  
3    Japan   377975   126160000  54130 


 日本語が使われたファイルの読み出しでエンコードエラーが出る場合はテキストファイルの場合同様、encoding='SHIFT-JIS'またはencoding='cp932'とエンコードを与えるかengine='python'としてエンコードエンジンを指定する。



3. エクセルファイルの読み込み

 エクセルファイルの読み込みにはread_excelを用いる。

import pandas as pd

df = pd.read_excel('table.xlsx')
print(df)

実行結果

        国     面積        人口    GDP
0 アメリカ  9628000   327830000 204128 
1     中国  9634057  1395380000 136000  
2   ロシア 17098246   146804400  20968  
3     日本   377975   126160000  54130 


4. リファレンス

pandas > pandas.read_table
pandas > pandas.read_csv
pandas > pandas.read_excel

使用したバージョン:Python 3.7.0/pandas 1.0.3

0 件のコメント:

コメントを投稿