pandasのread_csvでファイルを読み込む。
csv読み込み。
そのままread_csvすると1行目をheaderとして認識する。ヘッダがない場合はheader=Noneとしておけば良い。
下記のようなファイルを読み込んでみる。
10,8,3 12,1,5 5,3,3
import pandas as pd pd.read_csv("foo.csv", header=None)
10 8 3 0 12 1 5 1 5 3 3
試してみたところ、header=-1とかheader=Falseでも同じ挙動になった。
headerに名前を付ける場合は、namesを使用。
pd.read_csv( 'foo.txt', names=('a', 'b', 'c') )
a b c 0 10 8 3 1 12 1 5 2 5 3 3
ヘッダ行があれば特に何も指定せずに読み込める。
下記のようなファイルを読み込んでみる。
col1,col2,col3 10,8,3 12,1,5 5,3,3
pd.read_csv( 'foo.txt' )
col1 col2 col3 0 10 8 3 1 12 1 5 2 5 3 3
1列目をindexにしてみる。
下記のデータを読み込む。
col1,col2,col3 a,8,3 b,1,5 c,3,3
pd.read_csv( 'foo.txt', index_col='col1' )
col2 col3 col1 a 8 3 b 1 5 c 3 3
dtypeを指定する。
そのままだと自動判定
data = pd.read_csv( 'foo.txt' ) data['col1'].dtype #=> dtype('O') data['col3'].dtype #=> dtype('int64')
data = pd.read_csv( 'foo.txt', dtype={'col1':'S10', 'col2':'f8', 'col3':'f8'} ) data['col1'].dtype #=> dtype('O') data['col3'].dtype #=> dtype('float64'
欠損値がある場合、そのまま読むと数値はnanになる。
col1,col2,col3 a,8,3 b,1, c,,3
pd.read_csv( 'foo.txt' )
col1 col2 col3 0 a 8 3 1 b 1 NaN 2 c NaN 3
0埋めしたい場合はどうするんだろう。とりあえずこれでいいか。
pd.read_csv( 'foo.txt' ).fillna(0)
tsvの場合はdelimiterでタブを指定。
pd.read_csv( 'foo.txt', delimiter='\t' )
delim_whitespaceを指定するとspaceとかtabをdelimiterとして扱う。
pd.read_csv( 'foo.txt', delim_whitespace=True )
to_csvで出力可能。
data = pd.read_csv( 'foo.txt' ) data.to_csv() #=> ',col1,col2,col3\n0,a,8,3\n1,b,1,5\n2,c,2,3\n'
ファイル出力
data.to_csv( 'bar.csv' )
結果
,col1,col2,col3 0,a,8,3 1,b,1,5 2,c,2,3
元のファイルにindexが付いた状態で出力されている。読み込む時はindex_colを指定しないとさらにindexが付加されることに。
pd.read_csv( 'bar.csv', index_col=0 )
indexを出力対象から外したい場合はindex=Falseを指定。
data.to_csv( 'bar.csv', index=False )
tsv出力
data.to_csv( 'bar.csv', sep='\t' )
全部quoteで囲む場合。
import csv data.to_csv( 'bar.csv', quoting=csv.QUOTE_ALL )