本記事では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")