【问题标题】:Pandas: SettingWithCopyWarning: [duplicate]熊猫:SettingWithCopyWarning:[重复]
【发布时间】:2017-12-23 12:43:19
【问题描述】:

我尝试使用以下代码将列转换为“日期”:

df.['DATE'] =  pd.to_datetime(df['DATE'])

df.DATE =  pd.to_datetime(df.DATE)

但我收到以下错误:

/Users/xyz/anaconda3/envs/sensor/lib/python3.6/site-packages/pandas/core/indexing.py:517: SettingWithCopyWarning:试图在一个副本上设置一个值 从 DataFrame 切片。尝试使用 .loc[row_indexer,col_indexer] = 取而代之的价值

请参阅文档中的注意事项: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self.obj[项目] = s

我把代码改成如下:

df.loc[:,'DATE'] =  pd.to_datetime(df.loc[:,'DATE'])

但我仍然遇到同样的错误。

这个也一样

for i in df.index:
    df.loc[i,'DATE'] =  pd.to_datetime(df.loc[i,'DATE'])

【问题讨论】:

  • 之前的代码是什么?
  • df = data.loc[data.ID == 79]

标签: python pandas


【解决方案1】:

您需要添加copy:

df = data.loc[data.ID == 79]

到:

df = data.loc[data.ID == 79].copy()

如果您稍后修改 df 中的值,您会发现修改不会传播回原始数据 (data),并且 Pandas 会发出警告。

【讨论】:

  • 如何判断df是view还是copy
  • 我想你可以通过print (df.is_copy)查看。
【解决方案2】:

问题在于您没有向我们展示的代码。在某个地方,你做了这样的事情:

df = other.loc[something]

这是此错误消息的根本原因。您需要使用.loc 或类似方法直接分配到原始DataFrame:

other.loc[something, 'DATE'] = whatever

【讨论】:

    猜你喜欢
    • 2014-05-25
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    相关资源
    最近更新 更多