Pandas Series中的复制警告

3 投票
1 回答
1091 浏览
提问于 2025-04-17 21:52

我有一列数据是日期时间格式的,我想把它改成只有日期的格式。

db['Date'] = db['Date'].apply(lambda x: x.date())

然后我收到了一个警告:

__main__:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead

我查了一下,改成了:

db.loc[:,'Date'] = db.loc[:,'Date'].apply(lambda x: x.date())

但是错误信息是:

    if isnull(other) or (np.isscalar(other) and other == tslib.iNaT):
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

这个错误也发生在我尝试给一个系列赋新值的时候:

db['new'] = db.apply(lambda x: my_func(x['A'],x['B']))

有没有人能告诉我这是怎么回事,以及我该怎么去掉这些警告?

我注意到我可以通过设置 db.is_copy = False 来关闭警告,但我更希望保留警告,以防我真的有重要的错误。所以我还是希望能找到办法,让代码正常运行而不出现警告信息。

提前谢谢大家。

1 个回答

0

我一直在用

df['THING'] = df['THING'].apply(function)

来设置值。正如Wes在他关于这个主题的笔记中提到的,那个警告其实是一种经验法则。并不是每次你这样赋值的时候,都是在对一个视图进行设置。你可以先进行赋值,然后调用 df.head()(或者其他的操作)来看看你的数据框是否真的发生了变化。如果真的变了,那警告又有什么关系呢?

撰写回答