迭代设置新列时解决 pandas DataFrame 的不兼容 dtype 警告

Tom*_*Tom 4 python dataframe pandas

设置新数据框列的值:

df.loc[df["Measure] == metric.label, "source_data_url"] = metric.source_data_url
Run Code Online (Sandbox Code Playgroud)

现在(从 Pandas 版本 2.1.0 开始)给出警告,

FutureWarning:
Setting an item of incompatible dtype is deprecated and will raise in a future error of pandas. Value '       metric_3' has dtype incompatible with float64, please explicitly cast to a compatible dtype
 first.
Run Code Online (Sandbox Code Playgroud)

Pandas文档讨论了如何解决 Series 的问题,但不清楚如何在分配新的 DataFrame 列时迭代地执行此操作(上面的行在指标循环中调用,它是发出警告的最终指标) 。如何才能做到这一点?

lut*_*tra 6

我有同样的问题。我的直觉是,当您第一次为该列设置值时source_data_url,该列尚不存在,因此 pandas 创建一个列source_data_url并将值分配NaN给它的所有元素。这使得 Pandas 认为该列dtypefloat64。然后它会发出此警告。

我的解决方案是在向其添加值之前创建具有某些默认值(例如空字符串)的列:

df["source_data_url"] = ""

或者None似乎也有效:

df["source_data_url"] = None