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

升级Pandas至2.2.2遇to_datetime弃用警告,求助解决

解决Pandas 2.2.2中read_json触发的to_datetime弃用警告

触发警告的场景

升级Pandas从1.3.5到2.2.2后,执行以下代码时触发了FutureWarning:

from io import StringIO
import json
import pandas

str_data = '{"Keyword":{"0":"TELECOM","1":"OPERATOR","Total":"Total"},"Type":{"0":"job_field","1":"title_class","Total":null},"Seniority Score":{"0":0.0,"1":-1.0,"Total":-1.0}}'
df = pandas.read_json(StringIO(str_data), typ='frame', orient='records')

FutureWarning:
在解析字符串时使用'unit'参数的to_datetime行为已被弃用。未来版本中,字符串将被解析为日期时间字符串,与不使用'unit'参数时的行为一致。如需保留旧行为,请在调用to_datetime前显式将整数或浮点数转换为数值类型。

问题根源

你没有主动调用to_datetime,但Pandas的read_json内部在自动推断数据类型时,因JSON中存在混合类型行(比如"Total"行同时包含字符串和数值),导致类型推断逻辑误触发了带unit参数的日期解析逻辑,进而抛出弃用警告。

解决方案

方案1:禁用自动日期转换(推荐)

直接关闭read_json的自动日期转换功能,因为你的数据中不存在日期类型:

df = pandas.read_json(StringIO(str_data), typ='frame', orient='records', convert_dates=False)

方案2:显式指定列数据类型

通过dtype参数明确指定每列的类型,避免Pandas自动推断出错:

dtype_spec = {
    "Keyword": str,
    "Type": str,
    "Seniority Score": float
}
df = pandas.read_json(StringIO(str_data), typ='frame', orient='records', dtype=dtype_spec)

方案3:预处理JSON拆分混合类型

如果需要保留"Total"行的特殊格式,可以先拆分数据再合并:

data = json.loads(str_data)
# 提取Total行数据
total_row = {col: data[col].pop("Total") for col in data}
# 先转换普通行,再添加Total行
df = pandas.DataFrame(data)
df.loc["Total"] = total_row

效果验证

以上方法均可彻底消除该FutureWarning,同时保证数据解析的准确性。优先选择方案1或2,实现更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 15:33:25