■ はじめに
https://dk521123.hatenablog.com/entry/2019/10/22/014957
https://dk521123.hatenablog.com/entry/2020/10/14/000000
の続き。 Pandas のデータフレームでちょっとした集計する実装にも かなり便利なので、メモする
目次
【1】データ集計 【2】Tips 1)List => DataFrame への変換 2)groupby & sum による集計 3)DataFrame => JSON(文字列) への変換 [補足] to_json の使用上の注意
【1】サンプル
import pandas as pd import json # 統計情報リスト statistical_info_list = [] statistical_info_list.append({"date": "2021-04-01", "customer_number": 1}) statistical_info_list.append({"date": "2021-03-01", "customer_number": 2}) statistical_info_list.append({"date": "2021-04-01", "customer_number": 3}) statistical_info_list.append({"date": "2021-02-01", "customer_number": 4}) statistical_info_list.append({"date": "2021-04-01", "customer_number": 5}) statistical_info_list.append({"date": "2021-01-01", "customer_number": 6}) statistical_info_list.append({"date": "2021-04-01", "customer_number": 7}) statistical_info_list.append({"date": "2021-02-01", "customer_number": 8}) statistical_info_list.append({"date": "2021-01-01", "customer_number": 9}) statistical_info_list.append({"date": "2021-02-01", "customer_number": 1}) # Tips 1)List => DataFrame への変換 df = pd.DataFrame(statistical_info_list) # Tips 2)groupby & sum による集計 df = df.groupby(['date'], as_index=False).sum() # Tips 3)DataFrame => JSON(文字列) への変換 for result in json.loads(df.to_json(orient='records')): print(result)
出力結果
{'date': '2021-01-01', 'customer_number': 15} {'date': '2021-02-01', 'customer_number': 13} {'date': '2021-03-01', 'customer_number': 2} {'date': '2021-04-01', 'customer_number': 16}
【2】Tips
1)List => DataFrame への変換
df = pd.DataFrame(statistical_info_list)
別例
import pandas as pd header_list = ['id', 'last_name', 'first_name', 'city'] body_list = [ ["1", "Bloggs", "Joe", "Dublin"], ["3", "J\\", "Mike", "Tokyo"], ["6", "A-///\\\\\\///\\\\\\", "Smith", "Osaka, \\Japan"], ] # data / columns で指定する data_frame = pd.DataFrame(data=body_list, columns=header_list) print(data_frame)
2)groupby & sum による集計
df = df.groupby(['date'], as_index=False).sum() # 今回は、分かりやすいように、 # Groupキーは1つ(’date’)しか扱わなかったが # 複数指定することも可能(['date', 'name', ...]みたいな)
3)DataFrame => JSON(文字列) への変換
json_str = df.to_json(orient='records') # orient='records' => [{column -> value}, ... , {column -> value}] # 他の詳細は、以下のサイトを参照のこと
https://note.nkmk.me/python-pandas-to-json/
[補足] to_json の使用上の注意
# df.to_json の戻り値は、文字列なので、 # for などでループさせるには # 以下のようにする必要がある json_data = json.loads(json_str) # ★ 今回のケースだと、to_dict() を使えばいい ★ for result in df.to_dict(orient='records'): print(result)
関連記事
Pandas ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/22/014957
Pandas ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/10/14/000000
Pandas ~ 基本編 / CSV編 ~
https://dk521123.hatenablog.com/entry/2020/11/17/000000
Pandas ~ 基本編 / Excel編 ~
https://dk521123.hatenablog.com/entry/2020/11/18/000000
Pandas ~ 基本編 / Excel => CSVに変換 ~
https://dk521123.hatenablog.com/entry/2021/01/25/000000
Pandas ~ 基本編 / データのクレンジング ~
https://dk521123.hatenablog.com/entry/2020/04/06/235555
Pandas ~ apply / transform ~
https://dk521123.hatenablog.com/entry/2021/07/27/000000
Pandas ~ to_xxxx / 出力編 ~
https://dk521123.hatenablog.com/entry/2021/04/10/192752
Pandas の環境設定でのトラブル
https://dk521123.hatenablog.com/entry/2021/03/19/000000