Python(pandas、NumPy、scikit-learnなど)によるデータの前処理大全

普段、筆者がデータの前処理で使っているpandasNumPyscikit-learnなどのモジュールの使い方を逆引きのリファレンス形式でまとめました。

一部のサンプルデータや前処理の手法については、データサイエンティスト協会100本ノック(構造化データ加工編)を参考にさせていただきました。素晴らしいコンテンツをご用意頂いたこと本当に感謝します。

それでは、以下のモジュールをインポートして、この記事をデータ前処理時の辞書代わりにして利用してください。

モジュールのインポート
import numpy as np
import pandas as pd
from sklearn import preprocessing as pp
from sklearn.model_selection import train_test_split
from imblearn.under_sampling import RandomUnderSampler
MEMO
この記事で紹介している全ての前処理は、テーブルの『逆引き』部分をクリックするとモーダルウィンドウが表示され、実際にプログラムの動作を確認することができます。

基本操作

pandas.Series

シリーズを作成する

逆引きコマンド戻り値
1次元配列から作成(インデックスなし)pd.Series(data=[1次元配列])pd.Series
1次元配列から作成(インデックスあり)pd.Series(data=[1次元配列], index=[行名のリスト])pd.Series
辞書から作成pd.Series(data={'行名': スカラー})pd.Series
  • pandas.Series — pandas 1.1.2 documentation
  • シリーズを別の型に変換する

    逆引きコマンド戻り値
    シリーズ→NumPy配列s.valuesnp.ndarray
    シリーズ→リストs.to_list()list
    シリーズ→辞書s.to_dict()dict
    シリーズ→マークダウンs.to_markdown()str
  • pandas.Series.values — pandas 1.1.2 documentation
  • pandas.Series.to_list — pandas 1.1.2 documentation
  • pandas.Series.to_dict — pandas 1.1.2 documentation
  • pandas.Series.to_markdown — pandas 1.1.2 documentation
  • シリーズから取得する

    逆引きコマンド戻り値
    インデックスを取得s.indexpd.Index
    データ配列の要素数を取得s.sizepd.Series
    データ配列の固有値リストを取得s.unique()np.ndarray
    データ配列の固有値の出現回数を取得s.value_counts(dropna=False)pd.Series
  • pandas.Series.index — pandas 1.1.2 documentation
  • pandas.Series.unique — pandas 1.1.2 documentation
  • pandas.Series.value_counts — pandas 1.1.2 documentation
  • シリーズのその他の操作

    逆引きコマンド戻り値
    シリーズをコピーs.copy()pd.Series
    データ配列の全要素に処理を適用s.apply(lambda x: 処理)pd.Series
  • pandas.Series.copy — pandas 1.1.2 documentation
  • pandas.Series.apply — pandas 1.1.2 documentation
  • pandas.DataFrame

    逆引き使用頻度コマンド戻り値
    1次元配列を値に持つ辞書から作成★★★★★pd.DataFrame(data={'列名': [1次元配列]})DataFrame
    2次元配列から作成★★★★★pd.DataFrame(data=[[2次元配列]], columns=[列名のリスト])DataFrame
    行のインデックスを取得★★★★★df.indexIndex
    列のインデックスを取得★★★★★df.columnsIndex
    データフレーム→NumPy配列★★★★☆df.valuesndarray
    データフレーム→マークダウン★★★☆☆df.to_markdown()str
    次元数(行数、列数)を取得★★★★★df.shapetuple
    各列のデータ型を取得★★★★★df.dtypesSeries
    データ配列の要約統計量を取得★★★★★df.describe()DataFrame
    データフレームをコピー★★☆☆☆df.copy()DataFrame
    データフレームを転置★☆☆☆☆df.TDataFrame
    データ配列の全要素に処理を適用★★★☆☆df.applymap(lambda x: 処理)DataFrame
  • pandas.DataFrame — pandas 1.1.2 documentation
  • pandas.DataFrame.index — pandas 1.1.2 documentation
  • pandas.DataFrame.columns — pandas 1.1.2 documentation
  • pandas.DataFrame.values — pandas 1.1.2 documentation
  • pandas.DataFrame.to_markdown — pandas 1.1.2 documentation
  • pandas.DataFrame.shape — pandas 1.1.2 documentation
  • pandas.DataFrame.dtypes — pandas 1.1.2 documentation
  • pandas.DataFrame.copy — pandas 1.1.2 documentation
  • pandas.DataFrame.T — pandas 1.1.2 documentation
  • pandas.DataFrame.applymap — pandas 1.1.2 documentation
  • pandas.Index

    逆引き使用頻度コマンド戻り値
    行のインデックスを取得★★★★★df.indexIndex
    列のインデックスを取得★★★★★df.columnsIndex
    列を行のインデックスにセット★★★☆☆df.set_index('列名')DataFrame
    行のインデックスを0から振り直す★★★★★df.reset_index(drop=True)DataFrame
    行のインデックスを列に追加★★★★☆df.reset_index()DataFrame
    行名を変更★★★★★df.rename(index={'変更前の行名': '変更後の行名'})DataFrame
    列名を変更★★★★★df.rename(columns={'変更前の列名': '変更後の列名'})DataFrame
    行、列名を文字列メソッドで一括変更★★★★☆df.rename(index=文字列メソッド, columns=文字列メソッド)DataFrame
  • pandas.DataFrame.index — pandas 1.1.2 documentation
  • pandas.DataFrame.columns — pandas 1.1.2 documentation
  • pandas.DataFrame.set_index — pandas 1.1.2 documentation
  • pandas.DataFrame.reset_index — pandas 1.1.2 documentation
  • pandas.DataFrame.rename — pandas 1.1.2 documentation
  • データI/O

    CSV

    読み込み

    逆引きコマンド
    日本語が含まれるファイルを読み込むpd.read_csv('sample.csv', encoding='cp932')
    Pythonオブジェクト型として読み込むpd.read_csv('sample.csv', dtype='object')
    ヘッダーを設定して読み込むpd.read_csv('sample.csv', names=[列名のリスト])
    インデックスを設定して読み込むpd.read_csv('sample.csv', index_col='列名')
    先頭から任意の行スキップして読み込むpd.read_csv('sample.csv', skiprows=行数)
    末尾から任意の行スキップして読み込むpd.read_csv('sample.csv', skipfooter=行数, engine='python')
    先頭から任意の行だけ読み込むpd.read_csv('sample.csv', nrows=行数)
    指定した列名だけ読み込むpd.read_csv('sample.csv', usecols=[列名のリスト])
    ワイルドカードで読み込む
    複数のCSVをまとめて1つに読み込む
  • pandas.read_csv — pandas 1.1.0 documentation
  • 書き出し

    逆引きコマンド
    インデックスを無視して書き出すdf.to_csv('sample.csv', index=False)
    ヘッダーを無視して書き出すdf.to_csv('sample.csv', header=False)
    文字コードを指定して書き出すdf.to_csv('sample.csv', encoding='UTF-8')
    ダブルクオートして書き出す
    任意の行数ごとにファイルを分割して書き出す
  • pandas.DataFrame.to_csv — pandas 1.1.0 documentation
  • BigQuery

    pandasのpandas.read_gbqメソッドやpandas.DataFrame.to_gbqメソッドでBigQueryのテーブルを読み込んだり書き込んだりするには、ターミナルでpandas-gbqモジュールのインストールが必要です。

    ターミナル
    pip install pandas-gbq

    読み込み

    テーブルを読み込む
    import pandas as pd
    
    # strベースのクエリ
    query = 'SELECT * FROM データセット名.テーブル名'
    
    # 標準SQLでテーブルをデータフレームとして格納する
    df = pd.read_gbq(query, project_id='プロジェクトID', dialect='standard')
  • pandas.read_gbq — pandas 1.1.2 documentation
  • 書き出し

    テーブルを上書き
    import pandas as pd
    
    # テーブルが存在する場合は、それを削除して再作成。
    df.to_gbq('データセット名.テーブル名', project_id='プロジェクトID', if_exists='replace')
    テーブルに追加
    import pandas as pd
    
    # テーブルが存在する場合はデータを挿入。存在しない場合は作成。
    df.to_gbq('データセット名.テーブル名', project_id='プロジェクトID', if_exists='append')

    pandas.DataFrame.to_gbqメソッドのtable_schemaパラメータにスキーマが設定されていない場合、データフレームのdtypesに基づいて生成されます。

  • 標準 SQL のデータ型  |  BigQuery  |  Google Cloud
  • 注意
    BigQueryのテーブルの列名は、全て英語で記号を使う場合は_(アンダーバー)のみとします。
  • pandas.DataFrame.to_gbq — pandas 1.1.2 documentation
  • データ抽出

    直接抽出

    逆引き使用頻度コマンド戻り値
    先頭5行を抽出★★★★★df.head()DataFrame
    末尾5行を抽出★★★★☆df.tail()DataFrame
    行番号で行を抽出★★☆☆☆df.iloc[[行番号のリスト], :]DataFrame
    行番号のスライスで行を抽出★★★☆☆df.iloc[行番号のスライス, :]DataFrame
    行名で行を抽出★★★☆☆df.loc[[行名のリスト], :]DataFrame
    1つの列名で列を抽出★★★★★df['列名']または、df.loc[:, '列名']Series
    複数の列名で列を抽出★★★★★df[[列名のリスト]]または、df.loc[:, [列名のリスト]]DataFrame
  • pandas.DataFrame.head — pandas 1.1.0 documentation
  • pandas.DataFrame.tail — pandas 1.1.0 documentation
  • pandas.DataFrame.iloc — pandas 1.1.0 documentation
  • pandas.DataFrame.loc — pandas 1.1.0 documentation
  • 条件抽出

    bool型参照

    逆引き使用頻度コマンド戻り値
    列の要素がスカラーと一致する行を抽出★★★★★df[df['列名'] == スカラー]DataFrame
    列の要素がスカラーと一致しない行を抽出★★★★★df[df['列名'] != スカラー]DataFrame
    列の要素が数値より小さい行を抽出★★★★★df[df['列名'] < 数値]DataFrame
    列の要素が数値以下の行を抽出★★★★★df[df['列名'] <= 数値]DataFrame
    列の要素が数値より大きい行を抽出★★★★★df[df['列名'] > 数値]DataFrame
    列の要素が数値以上の行を抽出★★★★★df[df['列名'] >= 数値]DataFrame
    列の要素が部分一致を満たす行を抽出★★★★★df[df['列名'].str.contains('文字列', na=False)]DataFrame
    列の要素が前方一致を満たす行を抽出★★★★☆df[df['列名'].str.startswith('文字列', na=False)]DataFrame
    列の要素が後方一致を満たす行を抽出★★★★☆df[df['列名'].str.endswith('文字列', na=False)]DataFrame
    列の要素が正規表現を満たす行を抽出★★★★★df[df['列名'].str.match(r'正規表現', na=False)]DataFrame
    論理積(AND)★★★★★df[(bool値のシリーズ1) & (bool値のシリーズ2)]DataFrame
    論理和(OR)★★★★★df[(bool値のシリーズ1) | (bool値のシリーズ2)]DataFrame
    否定(NOT)★★★★★df[~(bool値のシリーズ)]DataFrame
  • pandas.DataFrame.loc — pandas 1.1.0 documentation
  • queryメソッド

    逆引き使用頻度コマンド戻り値
    列の要素がスカラーと一致する行を抽出★★★★★df.query('列名 == スカラー')DataFrame
    列の要素がスカラーと一致しない行を抽出★★★★★df.query('列名 != スカラー')DataFrame
    列の要素が数値より小さい行を抽出★★★★★df.query('列名 < 数値')DataFrame
    列の要素が数値以下の行を抽出★★★★★df.query('列名 <= 数値')DataFrame
    列の要素が数値より大きい行を抽出★★★★★df.query('列名 > 数値')DataFrame
    列の要素が数値以上の行を抽出★★★★★df.query('列名 >= 数値')DataFrame
    論理積(AND)★★★★★df.query('条件式1 and 条件式2')DataFrame
    論理和(OR)★★★★★df.query('条件式1 or 条件式2')DataFrame
    否定(NOT)★★★★★df.query('not 条件式')DataFrame
    クエリ文字列の中で変数を使う★★★★★df.query('列名 == @変数')DataFrame
    注意
    列名に.や半角スペースが含まれていたり、数値だったりするとqueryメソッドは使えません。
  • pandas.DataFrame.query — pandas 1.1.0 documentation
  • 重複値

    抽出

    逆引き使用頻度コマンド戻り値
    要素が全て重複している行を抽出(最初の行を残す)★★★★☆df[df.duplicated()]DataFrame
    要素が全て重複している行を抽出(最後の行を残す)★★☆☆☆df[df.duplicated(keep='last')]DataFrame
    要素が全て重複している行を抽出(重複行は全て抽出)★★☆☆☆df[df.duplicated(keep=False)]DataFrame
    指定した列の要素が重複している行を抽出★★★★★df[df.duplicated(subset=[列名のリスト])]DataFrame
  • pandas.DataFrame.duplicated — pandas 1.1.2 documentation
  • 削除

    逆引き使用頻度コマンド戻り値
    要素が全て重複している行を削除(最初の行を残す)★★★☆☆df.drop_duplicates()DataFrame
    要素が全て重複している行を削除(最後の行を残す)★★☆☆☆df.drop_duplicates(keep='last')DataFrame
    要素が全て重複している行を削除(重複行は残さない)★★☆☆☆df.drop_duplicates(keep=False)DataFrame
    指定した列の要素が重複している行を削除★★★★★df.drop_duplicates(subset=[列名のリスト])DataFrame
    要素が全て重複している行を削除(indexを振り直す)★★★★☆df.drop_duplicates(ignore_index=True)DataFrame
  • pandas.DataFrame.drop_duplicates — pandas 1.1.2 documentation
  • 欠損値

    抽出

    逆引き使用頻度コマンド戻り値
    各列ごとの欠損値の数を確認★★★★★df.isnull().sum()Series
    欠損値が1つでもある行を抽出★★★★★df[df.isnull().any(axis=1)]DataFrame
    指定した1つの列名に欠損値がある行を抽出★★★★★df[df['列名'].isnull()]DataFrame
    指定した複数の列名に欠損値がある行を抽出★★★★☆df[df[[列名のリスト]].isnull().any(axis=1)]DataFrame
  • pandas.DataFrame.isnull — pandas 1.1.2 documentation
  • pandas.DataFrame.any — pandas 1.1.2 documentation
  • pandas.Series.isnull — pandas 1.1.2 documentation
  • 削除

    逆引き使用頻度コマンド戻り値
    欠損値が1つでもある行を削除★★★★☆df.dropna()DataFrame
    指定した列に欠損値がある行を削除★★★★★df.dropna(subset=[列名のリスト])DataFrame
  • pandas.DataFrame.dropna — pandas 1.1.2 documentation
  • 置換

    逆引き使用頻度コマンド戻り値
    すべての欠損値を指定した値で置換★★★★★df.fillna('値')DataFrame
    欠損値を列ごとに指定した値で置換★★★★☆df.fillna({'列名': '値'})DataFrame
  • pandas.DataFrame.fillna — pandas 1.1.2 documentation
  • 外れ値

    逆引き使用頻度コマンド戻り値
    zスコアで外れ値の検出(データ数が多い場合)★★★★★DataFrame
    四分位範囲で外れ値の検出(データ数が少ない場合)★★★★★DataFrame

    サンプリング

    逆引き使用頻度コマンド戻り値
    ランダムに1行を抽出★★☆☆☆df.sample()DataFrame
    ランダムに30行を抽出★★★★☆df.sample(n=30, replace=False, random_state=None)DataFrame
    ランダムに30%行を抽出★★★☆☆df.sample(frac=0.3, replace=False, random_state=None)DataFrame
  • pandas.DataFrame.sample — pandas 1.1.0 documentation
  • データ変形

    行、列の追加

    行、列の削除

    逆引き使用頻度コマンド戻り値
    指定した行を削除★★★★☆df.drop(index=[行名リスト])DataFrame
    指定した列を削除★★★★★df.drop(columns=[列名のリスト])DataFrame
  • pandas.DataFrame.drop — pandas 1.1.2 documentation
  • 並び替え

    逆引き使用頻度コマンド戻り値
    行のインデックスで昇順ソート★★★★★df.sort_index()DataFrame
    行のインデックスで降順ソート★★★★★df.sort_index(ascending=False)DataFrame
    列の要素で昇順ソート★★★★☆df.sort_values(by='列名')DataFrame
    列の要素で降順ソート★★★★☆df.sort_values(by='列名', ascending=False)DataFrame
    複数の列の要素でソート★★★★★df.sort_values(by=[列名のリスト], ascending=[boolリスト])DataFrame
    列の要素を辞書ソート★★★★★DataFrame
    シャッフルソート★★★★☆df.sample(frac=1)DataFrame
  • pandas.DataFrame.sort_index — pandas 1.1.2 documentation
  • pandas.DataFrame.sort_values — pandas 1.1.2 documentation
  • 結合

    ユニオン(縦方向の結合)

    逆引き使用頻度コマンド戻り値
    ユニオン(縦方向の結合)★★★★★pd.concat([df1, df2], ignore_index=True)DataFrame
  • pandas.concat — pandas 1.1.2 documentation
  • ジョイン(横方向の結合)

    逆引き使用頻度コマンド戻り値
    レフトジョイン(横方向の左結合)★★★★★pd.merge(df1, df2, on=[列名のリスト], how='left')DataFrame
    インナージョイン(横方向の内部結合)★★★☆☆pd.merge(df1, df2, on=[列名のリスト], how='inner')DataFrame
    アウタージョイン(横方向の外部結合)★★★★☆pd.merge(df1, df2, on=[列名のリスト], how='outer')DataFrame
  • pandas.concat — pandas 1.1.2 documentation
  • pandas.merge — pandas 1.1.2 documentation
  • 縦横変換

    分割

    逆引き使用頻度コマンド戻り値
    ホールドアウトセット★★★★☆DataFrame
  • sklearn.model_selection.train_test_split — scikit-learn 0.23.2 documentation
  • 不均衡データの調整

    目的変数のデータの比率に偏りがあるものを不均衡データと言います。偏りがあるままモデリングするといろいろ不都合があるので、通常は以下の方法のいずれかを使用しデータを揃えます。

    不均衡データの調整方法
    • アンダーサンプリング:多いデータを減らす
    • オーバーサンプリング:少ないデータを増やす

    データが不均衡データであるか否かは、pandas.Seriesクラスのvalue_countsメソッドで簡単に確認することができます。

    データが不均衡であるか確認する
    print(df)
    #     height  weight  target
    # 0    175.9    70.2       0
    # 1    167.2    58.1       0
    # 2    172.0    63.5       0
    # 3    182.1    78.3       0
    # 4    162.3    52.3       0
    # 5    170.4    64.2       0
    # 6    169.3    59.1       0
    # 7    170.5    70.2       0
    # 8    176.2    72.9       0
    # 9    172.1    67.9       0
    # 10   155.2    45.3       1
    # 11   162.1    50.1       1
    # 12   157.0    48.2       1
    # 13   156.0    62.2       1
    # 14   152.0    57.2       1
    
    print(df['target'].value_counts())
    # 0    10
    # 1     5
    # Name: target, dtype: int64

    アンダーサンプリング

    逆引きコマンド戻り値
    アンダーサンプリングで不均衡データを調整DataFrame, Series

    オーバーサンプリング

    逆引きコマンド戻り値
    オーバーサンプリングで不均衡データを調整DataFrame, Series

    データ変換

    型変換

    逆引き使用頻度コマンド戻り値
    整数型に型変換★★★★★df['列名'].astype('int')Series
    浮動小数点型に型変換★★★☆☆df['列名'].astype('float')Series
    文字列型に型変換★★★★★df['列名'].astype('str')Series
    ブール型に型変換★★★☆☆df['列名'].astype('bool')Series
    オブジェクト型に型変換★★★☆☆df['列名'].astype('object')Series
    複数の列を型変換★★★★★df.astype({'列名': 'データ型'})DataFrame
    全ての列を型変換★★★☆☆df.astype('データ型')DataFrame
  • pandas.Series.astype — pandas 1.1.2 documentation
  • pandas.DataFrame.astype — pandas 1.1.2 documentation
  • 日付型への変換

    逆引き使用頻度コマンド戻り値
    文字列→日時型★★★★★pd.to_datetime(df['列名'])Series
    8桁の数値→日時型★★☆☆☆pd.to_datetime(df['列名'], format='%Y%m%d')Series
    シリアル値→日時型★★☆☆☆pd.to_timedelta(df['列名'], unit='D') + pd.to_datetime('1900-01-01')Series
  • pandas.to_datetime — pandas 1.1.2 documentation
  • 二値化

    逆引きコマンド戻り値
    カテゴリ変数をone-hotエンコーディングpd.get_dummies(df)pd.DataFrame
    条件でone-hotエンコーディングnp.where(条件式, 1, 0)np.ndarray
  • pandas.get_dummies — pandas 1.1.2 documentation
  • numpy.where — NumPy v1.19 Manual
  • カテゴリ化

    逆引き使用頻度コマンド戻り値
    ビニング(階級幅に変換)★★★★★Series
    カテゴリデータに新規IDを振る★★★★☆df['列名'].astype('category').cat.codesSeries
    順序付きカテゴリデータに新規IDを振る★★★★☆Series
  • pandas.cut — pandas 1.1.2 documentation
  • pandas.Series.cat.codes — pandas 1.1.2 documentation
  • 正規化

    ハッシュ化

    逆引き使用頻度コマンド戻り値
    ハッシュ化★★★★☆Series

    要素の置換

    逆引き使用頻度コマンド戻り値
    辞書で要素を置換★★★★☆df['列名'].apply(lambda x: {'検索値': '置換値'}.get(x, x))Series
    正規表現に一致する要素を置換★★★★★df['列名'].str.replace(r'正規表現', '置換値')Series
    bool値のシリーズに一致した行番号の要素を置換★★★☆☆df.loc[bool値のシリーズ, '列名'] = '値'
    bool値のシリーズに一致した行番号の要素を置換★★★★★df['列名'].mask(bool値のシリーズ, '値')Series
    boolデータフレームに一致した要素を置換★★★★☆df.mask(bool値のデータフレーム, '値')DataFrame
  • pandas.Series.str.replace — pandas 1.1.2 documentation
  • pandas.Series.mask — pandas 1.1.2 documentation
  • pandas.DataFrame.mask — pandas 1.1.2 documentation
  • 各データ型の操作

    数値

    端数処理

    順位付け

    逆引き使用頻度コマンド戻り値
    同一順位ありの順位付け★★★☆☆df['列名'].rank(ascending=False, method='min')Series
  • pandas.Series.rank — pandas 1.1.2 documentation
  • スケール変換

    逆引き使用頻度コマンド戻り値
    正規化(0〜1にスケール変換)★★★★★ndarray
    標準化(平均0、標準偏差1にスケール変換)★★★★★ndarray
  • sklearn.preprocessing.MinMaxScaler — scikit-learn 0.23.2 documentation
  • sklearn.preprocessing.StandardScaler — scikit-learn 0.23.2 documentation
  • フォーマット変換

    逆引き使用頻度コマンド戻り値
    3桁のカンマ区切り表記★★★★☆df['列名'].apply(lambda n: f'{n:,}')Series
    小数点第2位の丸める★★★★☆df['列名'].apply(lambda n: f'{n:.2f}')Series
    パーセンテージ表記★★★★☆df['列名'].apply(lambda n: f'{n:.2%}')Series
    4桁で0埋め★★☆☆☆df['列名'].apply(lambda n: f'{n:0=4}')Series

    基数変換

    逆引き使用頻度コマンド戻り値
    2進数に変換★★☆☆☆df['列名'].apply(lambda n: f'{n:b}')Series
    8進数に変換★☆☆☆☆df['列名'].apply(lambda n: f'{n:o}')Series
    16進数に変換(小文字)★★☆☆☆df['列名'].apply(lambda n: f'{n:x}')Series
    16進数に変換(大文字)★★☆☆☆df['列名'].apply(lambda n: f'{n:X}')Series

    文字列

    逆引き使用頻度コマンド戻り値
    小文字→大文字★★☆☆☆df['列名'].astype('str').str.upper()Series
    大文字→小文字★★☆☆☆df['列名'].astype('str').str.lower()Series
  • pandas.Series.str.upper — pandas 1.1.2 documentation
  • pandas.Series.str.lower — pandas 1.1.2 documentation
  • 日付型

    逆引き使用頻度コマンド戻り値
    年を取得★★★★☆df['列名'].dt.yearSeries
    月を取得★★★★☆df['列名'].dt.monthSeries
    日を取得★★★★☆df['列名'].dt.daySeries
    時を取得★★★★☆df['列名'].dt.hourSeries
    分を取得★★★☆☆df['列名'].dt.minuteSeries
    秒を取得★★★☆☆df['列名'].dt.secondSeries
    曜日(0=月曜日、6=日曜日)を取得★★★★☆df['列名'].dt.weekdaySeries
    曜日(英語)を取得★★★☆☆df['列名'].dt.day_name()Series
    曜日(漢字)を取得★★★★☆df['列名'].dt.day_name(locale='ja_JP.UTF-8')Series
    日本の休日(土日祝)判定★★★★★Series
    フォーマットを指定して取得★★★★★df['列名'].dt.strftime('フォーマット')Series
    列同士の差(年、月、日)を取得★★★★★(df['列名1'] - df['列名2']).astype('timedelta64[時間の単位]')Series
    指定した日からの差(年、月、日)を取得★★★★☆(pd.Timestamp('YYYY-mm-dd') - df['列名']).astype('timedelta64[時間の単位]')Series
    今日からの差(年、月、日)を取得★★★★☆(pd.Timestamp.now() - df['列名']).astype('timedelta64[時間の単位]')Series
    日付を増減する★★☆☆☆Series
  • pandas.Series.dt.year — pandas 1.1.2 documentation
  • pandas.Series.dt.month — pandas 1.1.2 documentation
  • pandas.Series.dt.day — pandas 1.1.2 documentation
  • pandas.Series.dt.hour — pandas 1.1.2 documentation
  • pandas.Series.dt.minute — pandas 1.1.2 documentation
  • pandas.Series.dt.second — pandas 1.1.2 documentation
  • pandas.Series.dt.weekday — pandas 1.1.2 documentation
  • pandas.Series.dt.day_name — pandas 1.1.2 documentation
  • pandas.Series.dt.strftime — pandas 1.1.2 documentation
  • pandas.Timestamp — pandas 1.1.2 documentation
  • pandas.Timestamp.now — pandas 1.1.2 documentation
  • 位置情報型

    逆引きコマンド戻り値
    郵便番号から緯度経度を取得(HeartRails Geo API)Series, Series
    住所から緯度経度を取得(Geocording API)Series, Series
    使用したジオコーディングAPI

    データ集計

    要約統計量

    逆引き使用頻度コマンド戻り値
    データフレームの要約統計量★★★★★df.describe()DataFrame
    シリーズの要約統計量★★★★☆df['列名'].describe()Series
    シリーズのデータ数★★★★☆df['列名'].sizeint
    シリーズの有効データ数★★★★★df['列名'].count()int
    シリーズの有効データの固有値の数★★★☆☆df['列名'].nunique()int
    シリーズの有効データの合計値★★★★★df['列名'].sum()float
    シリーズの有効データの平均値★★★★★df['列名'].mean()float
    シリーズの有効データの中央値★★★★☆df['列名'].median()float
    シリーズの有効データの最頻値★★☆☆☆df['列名'].mode()Series
    シリーズの有効データの最小値★★★★★df['列名'].min()float
    シリーズの有効データの最大値★★★★★df['列名'].max()float
    シリーズの有効データの第1四分位数★★★★★df['列名'].quantile(0.25)float
    シリーズの有効データの第3四分位数★★★★★df['列名'].quantile(0.75)float
    シリーズの有効データの不偏歪度★★☆☆☆df['列名'].skew()float
    シリーズの有効データの不偏尖度★★☆☆☆df['列名'].kurt()float
    シリーズの有効データの不偏標準偏差★★★★★df['列名'].std()float
    シリーズの有効データの母標準偏差★★★★☆df['列名'].std(ddof=0)float
    シリーズの有効データの不偏標準誤差★★★☆☆df['列名'].sem()float
    シリーズの有効データの母標準誤差★★☆☆☆df['列名'].sem(ddof=0)float
  • pandas.DataFrame.describe — pandas 1.1.2 documentation
  • pandas.Series.describe — pandas 1.1.2 documentation
  • pandas.Series.size — pandas 1.1.2 documentation
  • pandas.Series.count — pandas 1.1.2 documentation
  • pandas.Series.nunique — pandas 1.1.2 documentation
  • pandas.Series.sum — pandas 1.1.2 documentation
  • pandas.Series.mean — pandas 1.1.2 documentation
  • pandas.Series.median — pandas 1.1.2 documentation
  • pandas.Series.mode — pandas 1.1.2 documentation
  • pandas.Series.min — pandas 1.1.2 documentation
  • pandas.Series.max — pandas 1.1.2 documentation
  • pandas.Series.quantile — pandas 1.1.2 documentation
  • pandas.Series.skew — pandas 1.1.2 documentation
  • pandas.Series.kurt — pandas 1.1.2 documentation
  • pandas.Series.std — pandas 1.1.2 documentation
  • pandas.Series.sem — pandas 1.1.2 documentation
  • グループ集計

    基本
    df.groupby(by=[列名のリスト], as_index=False).agg({'列名': [集約関数のリスト]の辞書})
    
    # Return:
    #     DataFrame

    サンプルプログラムを表示する。

    逆引き使用頻度agg関数で使える集約関数
    データ数★★★★☆'size'
    有効データ数★★★★★'count'
    有効データの固有値の数★★★☆☆'nunique'
    有効データの合計値★★★★★'sum'
    有効データの平均値★★★★★'mean'
    有効データの中央値★★★★☆'median'
    有効データの最頻値★★☆☆☆lambda n: n.mode().to_list()
    有効データの最小値★★★★★'min'
    有効データの最大値★★★★★'max'
    有効データの第1四分位数★★★★★lambda n: n.quantile(0.25)
    有効データの第3四分位数★★★★★lambda n: n.quantile(0.75)
    有効データの不偏歪度★★☆☆☆'skew'
    有効データの不偏尖度★★☆☆☆pd.Series.kurt
    有効データの不偏標準偏差★★★★★'std'
    有効データの母標準偏差★★★★☆lambda n: n.std(ddof=0)
    有効データの不偏標準誤差★★★☆☆'sem'
    有効データの母標準誤差★★☆☆☆lambda n: n.sem(ddof=0)
  • pandas.DataFrame.groupby — pandas 1.1.2 documentation
  • pandas.DataFrame.agg — pandas 1.1.2 documentation
  • ピボットテーブル

    基本
    df.pivot_table(
        values=[集計する列名のリスト],
        index=[行方向にグルーピングする列名のリスト],
        columns=[列方向にグルーピングする列名のリスト],
        aggfunc=[集約関数リスト],
        # fill_value=0,       # 集計後の欠損値を指定した値で穴埋め
        # margins=True,       # カテゴリごとの小計・総計を算出
        # margins_name='All', # 小計・総計のラベル名を変更
    )
    
    # Return:
    #     Excelのピボットテーブル形式のDataFrame

    サンプルプログラムを表示する。

    逆引き使用頻度aggfuncパラメータで使える集約関数
    データ数★★★★☆'size'
    有効データ数★★★★★'count'
    有効データの固有値の数★★★☆☆'nunique'
    有効データの合計値★★★★★'sum'
    有効データの平均値★★★★★'mean'
    有効データの中央値★★★★☆'median'
    有効データの最頻値★★☆☆☆lambda n: n.mode().to_list()
    有効データの最小値★★★★★'min'
    有効データの最大値★★★★★'max'
    有効データの第1四分位数★★★★★lambda n: n.quantile(0.25)
    有効データの第3四分位数★★★★★lambda n: n.quantile(0.75)
    有効データの不偏歪度★★☆☆☆'skew'
    有効データの不偏尖度★★☆☆☆pd.Series.kurt
    有効データの不偏標準偏差★★★★★'std'
    有効データの母標準偏差★★★★☆lambda n: n.std(ddof=0)
    有効データの不偏標準誤差★★★☆☆'sem'
    有効データの母標準誤差★★☆☆☆lambda n: n.sem(ddof=0)
  • pandas.DataFrame.pivot_table — pandas 1.1.2 documentation