You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pd.DataFrame.from_records构造含Timestamp与NaT列的DataFrame遇错求助

解决pd.DataFrame.from_records()处理混合Timestamp/NaT列的报错问题

核心问题原因

你遇到的报错是因为from_records()自动推断列类型时,对混合pd.Timestamp和pd.NaT的列识别混乱,错误地将NaT当成浮点型NaN,进而尝试把列转为整数类型导致ValueError。替换NaT为pd.NA能解决,但没必要逐个字典修改,下面是几个更高效的方案:

方案1:构造时显式指定列的dtype

直接在调用from_records()时,给存在混合类型的列指定datetime64[ns]类型,让pandas直接按时间类型解析,正确识别NaT:

import pandas as pd

# 示例数据
records = [
    {"event_time": pd.Timestamp("2024-01-01"), "value": 10},
    {"event_time": pd.NaT, "value": 20}
]

# 显式指定event_time列为datetime类型
df = pd.DataFrame.from_records(records, dtype={"event_time": "datetime64[ns]"})

方案2:用pd.Series预处理每一列

通过字典推导式把每列数据转为pd.Series,pd.Series能自动识别Timestamp和NaT的组合并设为正确的时间类型,再构造DataFrame:

# 提取所有列名
col_names = records[0].keys()
# 按列生成Series
col_data = {col: pd.Series([row[col] for row in records]) for col in col_names}
# 构造DataFrame
df = pd.DataFrame(col_data)

方案3:用pd.json_normalize替代from_records

json_normalize对混合类型和缺失值的类型推断更稳健,普通字典列表也能直接使用,无需额外配置:

df = pd.json_normalize(records)

这三个方案都是基于向量/批量操作,比逐个遍历字典修改效率高得多,尤其是数据量较大时优势明显。

内容的提问来源于stack exchange,提问作者obviouslyalive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:27:19