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

toe95027  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(1175)

设置新数据框列的值:

df.loc[df["Measure] == metric.label, "source_data_url"] = metric.source_data_url

现在(从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.

Pandas文档讨论了如何为Series解决这个问题,但并不清楚如何迭代地解决这个问题(上面的行在指标上的循环中被调用,并且它是给出警告的最终指标)。如何做到这一点?

qij5mzcb

qij5mzcb1#

我也有同样的问题。我的直觉是,当你第一次给列source_data_url赋值时,这个列还不存在,所以pandas创建了一个列source_data_url,并给它的所有元素赋值NaN。这使得Pandas认为列的dtypefloat64。然后它提出了这个警告。
我的解决方案是用一些默认值创建列,例如。空字符串,在向其添加值之前:
df["source_data_url"] = ""
或者None似乎也可以工作:
df["source_data_url"] = None

相关问题