Pandas Series中的复制警告
我有一列数据是日期时间格式的,我想把它改成只有日期的格式。
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()
(或者其他的操作)来看看你的数据框是否真的发生了变化。如果真的变了,那警告又有什么关系呢?