PandasのDataFrameでテキストファイルを読み込む・テキストファイルを書き込む

本記事ではPandasのDataFrameにテキストデータを読み書きする方法を紹介します。

こんな人におすすめ

・PandasのDataFrameでテキストファイルを読み込みたい。
・PandasのDataFrameでテキストファイルに書き込みたい。
・PandasのDataFrameにURLからデータを読み込みたい。
・読み込み位置を指定してPandasのDataFrameにデータを読み込みたい。
・データ型を指定してPandasのDataFrameにデータを読み込みたい。
・読み込む行数を指定してPandasのDataFrameにデータを読み込みたい。
・ヘッダ行の行数を指定してPandasのDataFrameにデータを読み込みたい。
・区切り文字を指定してPandasのDataFrameにデータを読み込みたい。
・文字コードを指定してPandasのDataFrameにデータを読み込みたい。

主なライブラリ

numpy
pandas

本ページで使用するライブラリをインポートするときは以下のコードを使用します。

import numpy as np
import pandas as pd

PandasのDataFrameでテキストファイルを読み込む

スペース区切りのテキストファイル(data1.txt)をPandasのDataFrameに読み込みます。

読み込むテキストファイル(data1.txt)の中身は以下となります。

No name price
1 aaa 10000
2 bbb 20000
3 ccc 30000

Pandasのread_tableを使うことで、PandasのDataFrameにデータを読み込むことができます。

df1 = pd.read_table('data1.txt', sep=' ')

print(df1)
#   No name  price
# 0   1  aaa  10000
# 1   2  bbb  20000
# 2   3  ccc  30000

タブ区切りのファイルを読み込む場合は、デフォルトの区切り文字がタブのため、sep引数を設定する必要はありません。

df2 = pd.read_table('data2.txt')

カンマ区切り(,)のファイルを読み込む場合は、sep引数にカンマを設定する方法とPandasのread_csv関数を使う方法があります。

df3 = pd.read_table('data3.txt', sep=',')

df3 = pd.read_csv('data3.txt')

PandasのDataFrameでテキストファイルに書き込む。

Pandasのto_csv関数を使うことで、PandasのDataFrameをテキストファイルに書き込むことができます。

df4.to_csv('data4.txt', sep=' ')

タブ区切りのtsvファイルを作成することも可能です。
区切り文字をタブにする場合は、以下のようにsepに’\t’を指定します。

df4.to_csv('data4.tsv', sep='\t')

PandasのDataFrameにURLからデータを読み込む

Pandasのread_htmlを使うことでWEBサイトから表データを取得することができます。

url = 表を取得したいサイトのURL
df5 = pd.read_html(url)

列名を指定してPandasのDataFrameにデータを読み込む

ヘッダ行がないファイルを読み込むときには、names引数を使用します。
ヘッダ行のないテキストファイル(data6.txt)を読み込みます。

1 aaa 10000
2 bbb 20000
3 ccc 30000

下のコードでは、ヘッダ行のないテキストファイルを読み込むときに、「No」「name」「price」という項目をnamesに設定してファイルを読み込みます。

columns=['No','name','price']
df6 = pd.read_table('data6.txt', sep=' ', names=columns)

print(df6)
#    No name  price
# 0   1  aaa  10000
# 1   2  bbb  20000
# 2   3  ccc  30000

データ型を指定してPandasのDataFrameにデータを読み込む

データ型を指定してPandasのDataFrameにデータを読み込むことができます。
No項目にデータ型を指定せずデータを読み込むとデータ型がint64に、データ型:int32を指定してデータを読み込むとデータ型がint32で読み込まれていることがわかります。

df7 = pd.read_table('data1.txt', sep=' ')
print(df7['No'])
# 0    1
# 1    2
# 2    3
# Name: No, dtype: int64

df8 = pd.read_table('data1.txt', sep=' ', dtype={'No': np.int32, 'price': np.int32})
print(df8['No'])
# 0    1
# 1    2
# 2    3
# Name: No, dtype: int32

読み込み位置を指定してPandasのDataFrameにデータを読み込む

読み込み位置を指定してDataFrameに読み込むときには、skiprowsとskipfooterの引数を使います。
1行目と最終行に余分なデータが含まれるdata9.txtを読み込む例を使って引数の使い方を見ていきます。

データここから
No Name Price
1 aaa 10000
2 bbb 20000
3 ccc 30000
データここまで

1行目を読み込まないようにskiprows=1、最終行を読み込まないようにskipfooter=1を指定することで余分なデータを除いてデータを読み込むことが出来ます。

df9 = pd.read_table('data9.txt', sep=' ', skiprows = 1, skipfooter = 1)
print(df9)
#    No Name  Price
# 0   1  aaa  10000
# 1   2  bbb  20000
# 2   3  ccc   30000

読み込む行数を指定してPandasのDataFrameにデータを読み込む

読み込む行数を指定する場合は、nrows引数を指定します。
読み込むテキストファイル(data1.txt)の中身は以下となります。

No name price
1 aaa 10000
2 bbb 20000
3 ccc 30000

下のコードでは、2行のデータを読み込むためにnrows=2を指定します。

df10 = pd.read_table('data1.txt', sep=' ', nrows=2)
print(df10)
# No Name     Price
# 1  aaa      10000
# 2  bbb      20000

ヘッダ行の行数を指定してPandasのDataFrameにデータを読み込む

ヘッダ位置を指定してDataFrameに読み込むときには、headerの引数を使います。
1行目に余分なデータが含まれるdata11.txtを読み込む例を使って引数の使い方を見ていきます。

データここから
No Name Price
1 aaa 10000
2 bbb 20000
3 ccc 30000

下のコードでは、2行目のデータをヘッダとして読み込むためにheader=1を指定します。

df11 = pd.read_table('data11.txt', sep=' ', header=1)
print(df11)
#    No Name  Price
# 0   1  aaa  10000
# 1   2  bbb  20000
# 2   3  ccc  30000

区切り文字を指定してPandasのDataFrameにデータを読み込む

区切り文字を指定してDataFrameに読み込むときには、sepの引数を使います。
タブ区切りのファイルを読み込むときはsep=’\t’を指定します。

df2 = pd.read_table('data1.txt', sep='\t')

文字コードを指定してPandasのDataFrameにデータを読み込む

文字コードを指定してPandasのDataFrameにデータを読み込む場合、encoding引数を指定します。

df12 = pd.read_csv("data12.txt", encoding="utf_8")