LoginSignup
20
31

More than 5 years have passed since last update.

pandasノススメ -pandasだからできること-

Last updated at Posted at 2018-02-24

背景

書いてて辛くなったのでSQLと同じように出来ることとpandasだからできることの2段階に分けている
前回記事はこちら
https://qiita.com/open_cans/items/c1568eaf497bd82cdf29

pandasだからできること

色々方法はあると思うがapply関数を紹介後,DataFrame型から二次元配列への変換を紹介する。

apply関数(引数がリストじゃない)

applyで列に対して引数を一つとる関数を適用することができる。
例えばfloatの値をintに変換するint()関数がある。これを以下のcsv_dataのb列に適用すると

import pandas as pd
csv_data = pd.read_csv("csv_data.csv")
csv_data['b'] = csv_data['b'].apply(int)

↓csv_data

a b string
1 2.0 ホゲ
4 5.1 ヒゲ

↓適用後

a b string
1 2 ホゲ
4 5 ヒゲ

自作の関数を適用する例も載せておく

import pandas as pd

def hoge(data):
    data += 10
    return data

csv_data = pd.read_csv("csv_data.csv")
csv_data['b'] = csv_data['b'].apply(hoge)

↓csv_data

a b string
1 2.0 ホゲ
4 5.1 ヒゲ

↓適用後

a b string
1 12.0 ホゲ
4 15.1 ヒゲ

apply関数(引数がリスト)

applyは複数列のデータを引数にとる関数を適用することもできる。
csv_dataのa列とb列の和が5よりも上なら1,それ以外は0を返す関数を適用する例を示す。

axis=1 を追加するといい。
追加すると、適用する関数にデータフレームの各行の列の値がリストで与えられる

import pandas as pd
csv_data = pd.read_csv("csv_data.csv")

def hoge(data1):
    if data1[0]+data1[1] > 5:
        return 1
    return 0

sample1['c']=sample1[['a','b']].apply(hoge, axis=1)

↓csv_data

a b string
1 2.0 ホゲ
4 5.1 ヒゲ

↓適用後

a b string c
1 2.0 ホゲ 0
4 5.1 ヒゲ 1

DataFrameをリストに変換する

applyだけではやりたいことが実現できない!!ということもあるだろう
ということで2次元配列に変換してピュアなpythonで弄ってしまおうというお話
これらを適用すると(あなたがpythonで出来ることなら)なんでも出来るようになる

1次元DataFrameをリストに変換する

import pandas as pd
csv_data = pd.read_csv("csv_data.csv")
csv_data = pd.DataFrame(csv_data['a']) #i次元のDataFrame
list_data = list(csv_data.values.flatten())

↓csv_data

a b string
1 2.0 ホゲ
4 5.1 ヒゲ

↓適用後

list_data
>> [1,4]

2次元DataFrameをリストに変換する

import pandas as pd
csv_data = pd.read_csv("csv_data.csv")
list_data= [list(row) for _, row in csv_data.iterrows()]

↓csv_data

a b string
1 2.0 ホゲ
4 5.1 ヒゲ

↓適用後

list_data
>> [[1, 2.0, 'ホゲ'], [4, 5.1, 'ヒゲ']]
20
31
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
20
31