6
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pandasの使い方

Last updated at Posted at 2018-02-04

pandasの機能と使い方について、使用したものを整理する。

CSVファイル読み込み

pandas.read_csv()

使用できる引数はマニュアル参照。
主な引数はこのページ参照。

サンプル
import pandas as pd
train = pd.read_csv('../train.csv')

CSVファイル出力

to_csv()を使用。

参考は[このページ](https://qiita.com/okadate/items/c36f4egit push origin masterb9506b358fb608#3-pandas%E3%82%92%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%95%E3%81%8A%E3%81%99%E3%81%99%E3%82%81)。

サンプル
import pandas as pd
train = pd.read_csv('../train.csv')

# 行名の出力が不要の場合は、index=Falseを指定する(defaultはTrue)
train.to_csv('train.csv', index=False)

欠損値の有無の確認

参考はこのページ

pandasのデータフレームに対して、isnull()とany()を使用する。
isnull()は項目が欠損値かどうかを判断し、any()は全体をみて真偽を返す。
カラム全体で欠損値が含まれるかどうか判断するには以下のサンプルのように使用する。

サンプル
import pandas as pd
train = pd.read_csv('../train.csv')
train.isnull().any(axis=0)
# (列方向を指定するためのanyの「axis=0」はデフォルトなので省略可)

以下のように返ってくる。
PassengerId False
Survived False
Pclass False
Name False
Sex False
Age True
SibSp False。
Parch False
Ticket False
Fare False
Cabin True
Embarked True
dtype: bool

欠損値の数を確認するにはany()の代わりにsum()を使用する。

サンプル
import pandas as pd
train = pd.read_csv('../train.csv')
train.isnull().sum()

以下のように返ってくる。
PassengerId 0
Survived 0
Pclass 0
Name 0
Sex 0
Age 177
SibSp 0
Parch 0
Ticket 0
Fare 0
Cabin 687
Embarked 2
dtype: int64

欠損値を補完する

参考はこのページ
fillna()を使用する。

サンプル
import pandas as pd
train = pd.read_csv('../train.csv')

# 欠損値を0埋めする
train.fillna(0)
# 欠損値を平均埋めする
train.fillna(train.mean())

特定の列を取得する

参考はこのページ

サンプル
import pandas as pd
train = pd.read_csv('../train.csv')

# どちらも同じ結果になる
train['Age']
train.Age

列の名称を変更

サンプル
import pandas as pd
train = pd.read_csv('../train.csv')

# Aの列名をaに変更
train.rename(columns={'A': 'a'}

特定の列を削除する

参考はこのページ

サンプル
import pandas as pd
train = pd.read_csv('../train.csv')

# Age列を削除
train.drop("Age", axis=1)

条件を指定して特定の行を取得する

参考はこのページ

サンプル
import pandas as pd
train = pd.read_csv('../train.csv')

# Ageが10以上のデータを抽出
train[train.Age >= 10]

クロス集計表を作成する

参考はこのページ

サンプル
import pandas as pd
train = pd.read_csv('../train.csv')

pd.crosstab(train['Sex'], train['Survived'])
Survived 0 1
Sex
female 81 233
male 468 109

ダミー変数を作成する

ダミー変数とは

参考はこのページ
カテゴリデータを数値変換したもの。
カテゴリデータはダミー変数化することにより、説明変数として使用することができる。

作成方法

参考はこのページ
get_dummies()を使用する。

サンプル
import pandas as pd
train = pd.read_csv('../train.csv')

# 「male」、「female」の値が格納されている性別項目をダミー変数化する
df_sex_dummy = pd.get_dummies(train['Sex'], prefix='Sex', drop_first=True)

以下の感じの結果になる。

Sex_male
1
0
1

「Sex_female」列が生成されないのは、drop_firstをTrueにしているから。
ダミー変数を作成するときには1つ目のカテゴリは多重共線性への対応から作成しないのが流儀。
多重共線性については以下参考。
参考1
参考2

結合

参考はこのページ
join()を使用。
デフォルトではleft outer joinになるので注意。結合キーはindexになる。

サンプル
# train_joinにtrain1とtrain2を結合したデータを格納。結合軸はtrain1
train_join = train1.join(train2)
複数の結合条件
# 結合条件をリストにする
merge_joken=('a', 'b', 'c')
train_join = pd.merge(train1, train2, on=merge_joken)

PostgreSQLにテーブル作成

データフレーム内容でPostgreSQLに直接テーブルを作成する。

サンプル
# dfはデータフレーム
import psycopg2
from sqlalchemy import create_engine

engine=create_engine("postgresql://username:password@hostname:port/dbname")

df.to_sql("table_name", engine, if_exists="replace", index=False)

PostgreSQLのデータをデータフレームに投入

サンプル
import pandas as pd
import psycopg2

# 接続情報
connection_config = {
    'host': '',
    'port': '',
    'database': '',
    'user': '',
    'password': ''
}

# 接続
connection = psycopg2.connect(**connection_config)

# DataFrameでロード
dataframe = pd.read_sql(sql="SELECT 〜;", con=connection)
6
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?