DISTRICT 37

なにか

Pandasでcsvを操作

Pandasの操作シリーズ

CSVファイルからPandasを作る

こういうCSVデータがあったとする。

no,Sepal.Length,Sepal.Width,Petal.Length,Petal.Width,Species
1,5.1 ,3.5 ,1.4 ,0.2 ,setosa
2,4.9 ,3.0 ,1.4 ,0.2 ,setosa
3,4.7 ,3.2 ,1.3 ,0.2 ,setosa

まずは基本系

import pandas as pd #以下省略
df = pd.read_csv("hoge.csv")
print(df)

結果としてこうなる。デフォルトで一行目がタイトルとなり、0から始まるインデックス列が自動的に付与される。

no Sepal.Length Sepal.Width Petal.Length Petal.Width Species
0 1 5.1 3.5 1.4 0.2 setosa
1 2 4.9 3.0 1.4 0.2 setosa
2 3 4.7 3.2 1.3 0.2 setosa

インデックスを指定したい場合はindex_colを指定

import pandas as pd #以下省略
df = pd.read_csv("hoge.csv", index_col="no")
print(df)

指定した列がインデックス列となる

no Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa

タイトルがなく、一行目からデータがある場合はheaderパラメータを指定する。

df = pd.read_csv("hoge.csv", header=None)
print(df)

タイトルが自動的にふられて読み込まれる。

no 1 2 3 4 5
0 1 5.1 3.5 1.4 0.2 setosa
1 2 4.9 3.0 1.4 0.2 setosa
2 3 4.7 3.2 1.3 0.2 setosa

そういったデータにヘッダーを付けて読み込みたい場合はnamesパラメータを指定する。

df = pd.read_csv("hoge.csv", names=('a','b','c','d','e'))
print(df)

指定したヘッダーで読み込まれる

no a b c d e
0 1 5.1 3.5 1.4 0.2 setosa
1 2 4.9 3.0 1.4 0.2 setosa
2 3 4.7 3.2 1.3 0.2 setosa

カンマ区切りではなく、タブ区切りの場合にはdelimiterを指定する

df = pd.read_csv("hoge.csv", delimiter='\t')

delimiterを指定することで、タブだけでなく他の区切り形式でも読み込むことができる。

PandasからCSVを作る

まずは基本系

import pandas as pd #以下省略
df.to_csv("hoge/hoge/iris.csv")

デフォルトではインデックスがつく

,no,Sepal.Length,Sepal.Width,Petal.Length,Petal.Width,Species
0,1,5.1 ,3.5 ,1.4 ,0.2 ,setosa
1,2,4.9 ,3.0 ,1.4 ,0.2 ,setosa
2,3,4.7 ,3.2 ,1.3 ,0.2 ,setosa

インデックスを外したい場合はindexをFalseに指定する

df.to_csv("hoge/hoge/iris.csv", index=False)

デリミタをタブにしたい場合はsepを指定する

df.to_csv("hoge/hoge/iris.csv", sep="\t")

他の区切り文字でもいける。

また、データをquoteで囲む場合はquotingを指定する

import csv
df.to_csv("hoge/hoge/iris.csv", quoting=csv.QUOTE_ALL)