1. はじめに
新潟で Python Pandas もくもく勉強会 というものを主催しています。本記事はその 2019/08/21 に行われる勉強会で私が行う 5分LT の資料です。1週間くらい Pandas を使ってみて、記憶に残っているものをまとめました。
2019/08/21 の Pandas 勉強会用
updated: <2019-08-20 Tue>
Pandas 覚えたことまとめ
2. import 文
import pandas as pd import numpy as np
3. 出現頻度のカウント
data = ['YES', 'YES', 'NO', 'NO', '-'] s = pd.Series(data) # series の value_counts メソッドを使用する s.value_counts() # NO 2 # YES 2 # - 1 # dtype: int64 # DataFrame の場合 data = ['YES', 'YES', 'NO', 'NO', '-'] data2 = ['A', 'A', 'A', 'B', 'C'] s2 = pd.Series(data2) df = pd.concat([s, s2], axis=1) # df に value_counts メソッドは存在しない # df の列全体に value_counts を適用するときは apply を使用するとできる df.apply(lambda s: s.value_counts()) # 0 1 # - 1.0 NaN # A NaN 3.0 # B NaN 1.0 # C NaN 1.0 # NO 2.0 NaN # YES 2.0 NaN
4. Excel あるある
4.1. 作者の主観により特定の行がデータの区切りとなっていると思われるエクセルをどうにかする
data = ['・赤い果物', 'いちご', 'りんご', '・緑色の果物', 'キウイ', 'メロン', '・紫色の果物', 'ぶどう'] s = pd.Series(data) s # 0 ・赤い果物 # 1 いちご # 2 りんご # 3 ・緑色の果物 # 4 キウイ # 5 メロン # 6 ・紫色の果物 # 7 ぶどう # dtype: object # DataFrame に変換(あとで pd.merged で結合できるようにするため) df = s.to_frame() # '・赤い果物', '・緑色の果物', '・紫色の果物' に共通の'・'を含む行を抽出、name属性を設定しておく s2 = s[s.map(lambda x: '・' in x)] s2.name = '種類' s2 # 0 ・赤い果物 # 3 ・緑色の果物 # 6 ・紫色の果物 # Name: 種類, dtype: object # DataFrame に変換(あとで pd.merged で結合できるようにするため) df2 = s2.to_frame() # インデックスをキーとして結合 df3 = pd.merge(df2, df, left_index=True, right_index=True, how='outer') df3 # 種類 0 # 0 ・赤い果物 ・赤い果物 # 1 NaN いちご # 2 NaN りんご # 3 ・緑色の果物 ・緑色の果物 # 4 NaN キウイ # 5 NaN メロン # 6 ・紫色の果物 ・紫色の果物 # 7 NaN ぶどう # 「種類」列の NaN を 埋める df3['種類'].fillna(method='ffill', inplace=True) df3 # 種類 0 # 0 ・赤い果物 ・赤い果物 # 1 ・赤い果物 いちご # 2 ・赤い果物 りんご # 3 ・緑色の果物 ・緑色の果物 # 4 ・緑色の果物 キウイ # 5 ・緑色の果物 メロン # 6 ・紫色の果物 ・紫色の果物 # 7 ・紫色の果物 ぶどう # df3 から s2 のインデックスの行を削除する df3.drop(index=s2.index, inplace=True) df3 # 種類 0 # 1 ・赤い果物 いちご # 2 ・赤い果物 りんご # 4 ・緑色の果物 キウイ # 5 ・緑色の果物 メロン # 7 ・紫色の果物 ぶどう