- 1. はじめに
- 2. import 文
- 3. Series または DataFrame の index を1始まりにする方法
- 4. Series または DataFrame を比較して一致する行を探す
- 5. np.full みたいに要素全てが同じ値からなる Series を作る方法
1. はじめに
新潟で Python Pandas もくもく勉強会 というものを主催しています。本記事はその 2019/08/04 に行われる勉強会で私が行う 5分LT の資料です。(資料置き場がないのでブログを活用しています)。1週間くらい Pandas を使ってみて、記憶に残っているものをまとめました。
2. import 文
import pandas as pd
3. Series または DataFrame の index を1始まりにする方法
3.1. Series の場合
3.1.1. 使用するデータ
data = ['a', 'b', 'c'] s = pd.Series(data) s ################# # In [392]: s # # Out[392]: # # 0 a # # 1 b # # 2 c # # dtype: object # #################
3.1.2. 方法
'''index を指定しない場合、自動で 0 始まりのインデックスとなるので単に +1 すればよい''' s.index += 1 s ################# # In [89]: s # # Out[89]: # # 1 a # # 2 b # # 3 c # # dtype: object # #################
3.2. DataFrame の場合
3.2.1. 使用するデータ
data = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']] df = pd.DataFrame(data) df ################ # In [397]: df # # Out[398]: # # 0 1 2 # # 0 a b c # # 1 d e f # # 2 g h i # ################
3.2.2. 方法
'''(Series と同じ)index を指定しない場合、自動で 0 始まりのインデックスとなるので単に +1 すればよい''' df.index += 1 df ################ # In [189]: df # # Out[189]: # # 0 1 2 # # 1 a b c # # 2 d e f # # 3 g h i # ################
4. Series または DataFrame を比較して一致する行を探す
4.1. Series の場合
4.1.1. 使用するデータ
data = ['a', 'b', 'c'] data2 = ['a', 'x', 'c'] s = pd.Series(data) s2 = pd.Series(data2) s s2 ################# # In [128]: s # # Out[128]: # # 0 a # # 1 b # # 2 c # # dtype: object # # # # In [129]: s2 # # Out[129]: # # 0 a # # 1 x # # 2 c # # dtype: object # #################
4.1.2. 比較を行う
s3 = s==s2 s3 ################# # In [130]: s3 # # Out[130]: # # 0 True # # 1 False # # 2 True # # dtype: bool # #################
4.1.3. フィルタリング
s4 = s[s3] s4 ################ # In [380]: s4 # # Out[380]: # # 0 a # # 2 c # ################
4.2. DataFrame の場合
4.2.1. 使用するデータ
data = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']] data2 = [['a', 'b', 'c'], ['d', 'x', 'f'], ['g', 'h', 'i']] df = pd.DataFrame(data) df2 = pd.DataFrame(data2) df df2 ################# # In [227]: df # # Out[227]: # # 0 1 2 # # 0 a b c # # 1 d e f # # 2 g h i # # # # In [228]: df2 # # Out[228]: # # 0 1 2 # # 0 a b c # # 1 d x f # # 2 g h i # #################
4.2.2. 一致する行を見つける方法
4.2.2.1. 比較
df3 = df==df2 df3 ######################## # In [244]: df3 # # Out[244]: # # 0 1 2 # # 0 True True True # # 1 True False True # # 2 True True True # ########################
4.2.2.2.フィルタリング
# df と df2 で一致する行を抽出したい。 # df3 で全ての行が True の行のことなので、その行を抽出する # all を使用するとできる # all で reduce する方向は axis で決める、列方向に reduce するには axis=1 とする # all は全ての行(観測点)に適用される df4 = df3.all(axis=1) df4 ################# # In [253]: df4 # # Out[255]: # # 0 True # # 1 False # # 2 True # # dtype: bool # ################# # 以下のようにすると df と df2 の行において一致するの行だけ抽出できる df5 = df[df4] df5 ################# # In [280]: df5 # # Out[280]: # # 0 1 2 # # 0 a b c # # 2 g h i # #################
4.2.3. 一致しない行を見つける方法
4.2.3.1. 比較
df6 = df!=df2 df6 ########################## # In [288]: df6 # # Out[288]: # # 0 1 2 # # 0 False False False # # 1 False True False # # 2 False False False # ##########################
4.2.3.2. フィルタリング
# 注意!!: ひとつでも値が異なる行を見つけたいので、 all ではなく any を使用する # (個人的にはまったのでメモ) df7 = df6.any(axis=1) df7 ################# # In [319]: df7 # # Out[319]: # # 0 False # # 1 True # # 2 False # # dtype: bool # ################# df8 = df[df7] df8 ################# # In [333]: df8 # # Out[333]: # # 0 1 2 # # 1 d e f # ################# # (Tips) 上記以外の書き方で、等価となる式 # 「"一致する行"でない行」を抽出 df9 = df[~df4] df9 ################# # In [421]: df9 # # Out[421]: # # 0 1 2 # # 1 d e f # #################
5. np.full みたいに要素全てが同じ値からなる Series を作る方法
data = ['a']*5 s = pd.Series(data) s ################# # In [387]: s # # Out[387]: # # 0 a # # 1 a # # 2 a # # 3 a # # 4 a # # dtype: object # #################