首页 > 解决方案 > 试图在来自 DataFrame 的切片副本上设置一个值 - 尝试了以前的解决方案

问题描述

这已经出现了很多,但提出的答案似乎没有帮助。

我有一个日期时间列,我正在尝试将其转换为 d/m/yh:m 格式。

我正在使用以下代码:

change_details.loc[:, 'Planned Start Date'] = change_details['Planned Start Date'].dt.strftime('%d %m, %Y %h:%m')

按照以前的答案,这应该是防止此警告的正确方法,但我仍然得到它:

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

我也尝试使用 .copy() 后缀无济于事!

有任何想法吗?

标签: pythonpandas

解决方案


所以我发现了我的问题,

它在代码的早期,我最初是从另一个数据帧中切分 change_details 的。

change_details = gdp_sched_today[[start_date', 'end_date']]
change_details.columns = ['Planned Start Date', 'Planned End Date']
change_details['Planned Start Date'] = change_details['Planned Start Date'].dt.strftime('%d/%m/%Y %h:%M')
change_details['Planned End Date'] = change_details['Planned End Date'].dt.strftime('%d/%m/%Y %H:%M')

我可以通过在第一行添加 .copy() 来解决这个问题,确保 Pandas 知道我打算将其作为副本而不是视图。

change_details = gdp_sched_today[[start_date', 'end_date']].copy()
change_details.columns = ['Planned Start Date', 'Planned End Date']
change_details['Planned Start Date'] = change_details['Planned Start Date'].dt.strftime('%d/%m/%Y %h:%M')
change_details['Planned End Date'] = change_details['Planned End Date'].dt.strftime('%d/%m/%Y %H:%M')

如果警告能更清楚地说明触发它的原因,那肯定会很好:)


推荐阅读