2017-07-18 40 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