2017-07-18 38 views
3

我尝试下面的代码转换列 “日期”:熊猫:SettingWithCopyWarning:

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: 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

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self.obj[item] = 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']) 
+0

之前的代码是什么? – jezrael

+0

'df = data.loc [data.ID == 79]' – athraa

回答

3

您需要添加copy:在df

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

如果修改值以后你:

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

到会发现这些修改不会传播回原始数据(data),并且Pandas会警告G。

+0

如何判断df是'view'还是'copy'? – athraa

+0

我想你可以通过print(df.is_copy)来检查它。 – jezrael

2

的问题是在你还没有表现出我们的代码。某处,你做了这样的事情:

df = other.loc[something] 

这是此错误消息的根本原因。你需要使用.loc或类似的直接导入原始数据帧分配:

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