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)