将 pandas 数据帧转换为字典(时间戳->日期时间转换)

Converting pandas dataframe to dict (timestamp->datetime conversions)

提问人:24n8 提问时间:11/9/2023 更新时间:11/10/2023 访问量:50

问:

我有一个带有列的数据帧。当我这样做时,列值的类型将转换为字典条目中的 pandas 时间戳。dfdtdf.to_dict(orient="records")dt

所以我在考虑做这样的事情:

list_of_dicts = [
    {col: val.to_pydatetime() if isinstance(val, pd.Timestamp) else val for col, val in row.items()}
    for row in df.to_dict(orient='records')
]

有没有更好/天生的方法来在手术期间进行这种转换?to_dict

Python Pandas 日期 时间戳

评论

0赞 FObersteiner 11/9/2023
所以你的目标是在输出中包含香草 Python 日期时间对象?
0赞 24n8 11/9/2023
@FObersteiner对

答:

0赞 Aneema 11/9/2023 #1

Pandas 没有提供内置参数来控制日期的序列化,但您可以在调用时控制日期时间转换,这允许对日期时间格式进行更多自定义。如果要将数据帧转换为类似 JSON 的格式,并且仍然可以控制日期时间的处理方式,这将非常有用。to_dict()to_json()

评论

0赞 FObersteiner 11/9/2023
JSON 没有 datetime 类型;日期时间将只是一个字符串或数字。to_json只允许您从 ISO 格式或 Unix 时间戳中进行选择 - 这是非常合理的,因为出于互操作性原因,json 不应包含任意格式的日期时间。
0赞 FObersteiner 11/10/2023 #2

您可以将 to_pydatetime 用作对 DF 列的操作,而不是对 Dict 进行后处理:

import pandas as pd
from pandas.api.types import is_datetime64_any_dtype as is_datetime

df = pd.DataFrame(
    {"Date": ["2021/01/01", "2021/01/01", "2021/01/02"], "Value": [1, 2, 3]}
)
df["Date"] = pd.to_datetime(df["Date"])

d = {
    # note that explicitly putting this into a series will not be required anymore in the future:
    col: pd.Series(df[col].dt.to_pydatetime(), dtype=object).to_dict()
    if is_datetime(df[col])
    else df[col].to_dict()
    for col in df.columns
}

d
{'Date': {0: datetime.datetime(2021, 1, 1, 0, 0),
  1: datetime.datetime(2021, 1, 1, 0, 0),
  2: datetime.datetime(2021, 1, 2, 0, 0)},
 'Value': {0: 1, 1: 2, 2: 3}}