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)
Pandasの基本操作
Pandasの操作シリーズ 第二弾
データの基本操作
所謂基本統計量がとれる
- 最大値の取得
df.max()
- 最小値の取得
df.min()
- 平均値の取得
df.mean()
- 中央値の取得
df.median()
- 分散の取得
df.var()
- 標準偏差の取得
df.std()
- 合計値の取得
df.sum()
- 尖度
df.kurt()
- 歪度
df.skew()
- 基本統計量
df.describe()
行の追加
行を追加する場合は列を合わせておくこと
df = df.append(new_df)
列の追加
列を追加する場合はデータ量を合わせておくこと
df['new_col'] = new_df
値の取得
- 行単位で取得する。
戻り値はSeries
df.ix[0]
複数行を取得する。この場合はDataFrameが戻り値となる
df.ix[[0,2]]
- 列単位で取得する。
戻り値はSeries
df['column_name']
複数列を取得。こちらもDataFrameとなる
df[['column_name','other_column']]
条件を満たすデータを選択
df[df['column_name'] > 30]
データの個数を数える
- 列に出てきた値の個数を数える。
度数分布とかに便利
df['column'].value_counts()
単純に数を数える場合
df['column'].count() df.count() #すべての列を対象にする len(df) #単純にこれでもいい
欠損値の扱い
- 欠損値を含むデータを削除
df.dropna()
- NaNを埋める
指定した文字で埋める
df.fillna(0)