我有一个日期时间格式的列,我想将其更改为日期格式。
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
来关闭警告,但我宁愿将其保留在那里,以防我确实遇到重要错误。所以我仍然希望做一些事情来使代码在没有警告消息的情况下充分运行。
提前致谢。
答案 0 :(得分:0)
我使用
设置值df['THING'] = df['THING'].apply(function)
一直以来。正如Wes在他的notes中指出的那样,警告是一种启发式。并非总是如此,当您以这种方式进行分配时,您将对视图进行设置。进行分配,然后调用df.head()
(或其他),看看你的框架是否实际发生了变化。如果有,谁在乎是否有警告?