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)

Pandasの基本操作

Pandasの操作シリーズ 第二弾

前回 dragstar.hatenablog.com

データの基本操作

所謂基本統計量がとれる

www.mm-lab.jp

  • 最大値の取得
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)