pandas 2.0+ 已移除 infer_datetime_format、.ix 和 .append(),excel 读取需改用 openpyxl 引擎;应升级代码以适配新 api 并避免警告或报错。

pd.to_datetime() 里的 infer_datetime_format 参数已失效,不是你的代码写错了,是 pandas 主动把它拿掉了——2.0.0 版本起标记弃用,3.0+ 会直接报错。
为什么 infer_datetime_format 被干掉了
新版本 pandas 的日期解析引擎自己就能猜格式,而且比你手动设 infer_datetime_format=True 更快、更稳。这个参数原本是给旧版“补效率”的,现在成了冗余开关。
它只在 pd.to_datetime() 中起作用,其他地方根本没这玩意儿。保留它不会让代码崩,但会持续弹 UserWarning,而且未来某天运行就真挂了。
- 如果你用的是 pandas ≥ 2.0:直接删掉这个参数,别犹豫
- 如果你的日期列格式统一(比如全是
"2023-01-01"):加format="%Y-%m-%d",解析速度反而更快 - 如果你靠它“蒙混过关”处理杂乱格式(如混着
"01/01/2023"和"20230101"):删掉后可能解析失败,得先清洗或分批处理
df.ix 找不到了,不是 import 没写对
.ix 在 pandas 0.20.0 就被标为弃用,1.0+ 彻底移除。现在用它,直接抛 AttributeError: 'DataFrame' object has no attribute 'ix',没商量余地。
它本来就是 .loc(标签索引)和 .iloc(位置索引)的模糊混合体,容易引发语义错误。官方砍掉它,是为了逼你写清楚到底要按名取还是按位置取。
- 想用行名/列名选数据 → 改用
.loc[行标签, 列标签] - 想用数字下标(第0行、第2列)→ 改用
.iloc[0, 2] - 如果原代码是
df.ix[0]且你确定是取第0行 → 直接换成df.iloc[0];但若df.index[0]是字符串(比如"A"),那就要用df.loc["A"]
df.append() 报错:方法没了,不是拼写错了
pandas 2.0.0 正式移除了 DataFrame.append() 方法。这不是 bug,是 API 整洁化动作。它和 .ix 一样,属于“历史包袱型接口”——功能能用 pd.concat() 更明确地替代。
常见误判是以为装错库或路径不对,其实只要 pandas ≥ 2.0,这个方法就不存在。
- 原来写
df1.append(df2)→ 改成pd.concat([df1, df2], ignore_index=True) - 如果原来用了
ignore_index=True,新写法里也得显式加上,否则索引会拼接而非重排 -
pd.concat()默认不修改原df,行为更可控;而.append()有inplace参数,容易让人忽略返回值
Excel 读取突然失败,可能卡在 xlrd 上
新版 pandas(≥ 2.0)对 xlrd 的要求变了:2.0.1+ 只支持 .xls,彻底不认 .xlsx;而老项目常默认用 xlrd 引擎读所有 Excel 文件。
结果就是:pd.read_excel("data.xlsx") 报 ImportError: Pandas requires version '2.0.1' or newer of 'xlrd',或者更隐蔽的 Unsupported format。
- 最稳妥解法:改用
openpyxl引擎,pd.read_excel("data.xlsx", engine="openpyxl") - 如果必须用
xlrd(比如只读.xls),就锁死xlrd==1.2.0,别升到 2.x - 别指望
pip install --upgrade xlrd能一劳永逸——升完反而更读不了 xlsx
pip show pandas 看清版本,再对照弃用列表扫一遍关键方法名,比盲试快得多。大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











