since 2021-10-19
https://pandas.pydata.org/docs/reference/api/pandas.concat.html
df を縦に結合
df1 = pd.read_csv(...) df2 = pd.read_csv(...) pd.concat([df1, df2])
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.value_counts.html
「どの値がいくつあるか」を Series で返す
dict or list of dicts を受け取って DataFrame を作る。
https://pandas.pydata.org/pandas-docs/version/1.2.0/reference/api/pandas.json_normalize.html
DynamoDB から PartiQL でデータを取り出して DataFrame を作りたい。
下記の AWS_ACCESS_KEY_ID の IAM には "dynamodb:PartiQLSelect" 権限が必要。
import boto3 import pandas as pd dynamodb = boto3.client("dynamodb", region_name=AWS_REGION_NAME, aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY) result = dynamodb.execute_statement(Statement=""" SELECT * FROM "テーブル名" where "ハッシュキー名" = 値 and "レンジキー名" between 'レンジキー範囲1' and 'レンジキー範囲2' """) data = result["Items"] df = pd.json_normalize(data) df.head()
例えば 'created_at': {'S': '2021-10-17T04:00:47.258208+0000'} みたいな値があると created_at.S という列ができる。
.S などのない列名に付け替える:
column_map = {name: name.split(".")[0] for name in df.columns} df.rename(columns=column_map, inplace=True)
df.set_index("列名") するとその列がインデックスになる。
df.reset_index() するとインデックスが通し番号になって、インデックスだった列は通常のデータの列になる。drop=True を付けると元のインデックスを削除。
いずれも inplace=True しないと、新しい df を返す。
df.reset_index().to_json(orient="records", lines=True) みたいにすると、素直な「各行がJSONのファイル」を得られる。
列の並び順を変える。
df の一番右の列を一番左に移す:
columns = list(df.columns) columns = [columns[-1]] + columns[:-1] df = df.reindex(columns=columns)
df の列を削除するには axis=1 を指定する
df.drop(["列名1", "列名2"], axis=1, inplace=True)
since 2021-11-09
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.melt.html
横持ちから縦持ちに。
こうすると plotly で2色の折れ線グラフが作れる。
>>> df.to_csv() ,Date,temperature,humidity 18303,2021-10-25 08:41:00,20.6,53 18304,2021-10-25 09:11:00,20.7,53 18305,2021-10-25 09:41:00,20.7,52 18306,2021-10-25 09:11:00,20.7,53 18307,2021-10-25 09:41:00,20.7,52 >>> df2 = pd.melt(df, id_vars="Date").set_index("Date") >>> df2.to_csv() Date,variable,value 2021-10-25 08:41:00,temperature,20.6 2021-10-25 09:11:00,temperature,20.7 2021-10-25 09:41:00,temperature,20.7 2021-10-25 09:11:00,temperature,20.7 2021-10-25 09:41:00,temperature,20.7 2021-10-25 08:41:00,humidity,53.0 2021-10-25 09:11:00,humidity,53.0 2021-10-25 09:41:00,humidity,52.0 2021-10-25 09:11:00,humidity,53.0 2021-10-25 09:41:00,humidity,52.0 >>> import plotly.express as px >>> px.line(df2, x=df2.index, y="value", color="variable")
since 2021-11-30
https://ggcs.io/2020/05/26/pandas-json/
https://note.nkmk.me/python-pandas-read-json/
orientオプション
df.loc[]
df.iloc[]
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.agg.html
agg() に渡せるもの
since 2022-01-10
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.merge.html