2017-10-20 28 views
2

我用下面的代碼在一個數據幀,以創建新列:Python的熊貓數據框警告仍然存在

# data is a dataframe object 
data.loc[:,'test'] = 5 

它帶有以下警告:

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 

我已經使用.loc[],爲什麼還有警告嗎?我的代碼中有什麼特別的地方嗎?謝謝!

+2

一般來說,你應該是安全的在這裏,你正在做的是去了解這個正確的方法。但是在這行中是否有引用或修改'df'的行?您很可能在代碼中使用了鏈接索引,並且現在正在對該副本進行就地修改。 –

+2

看到我在談論的一個例子[這裏](https://stackoverflow.com/questions/23296282/what-rules-does-pandas-use-to-generate-a-view-vs-a-copy )用查詢的例子 –

+0

感謝您的洞察!實際上我發現我之前使用過鏈接索引。通過殺死這種鏈式索引問題,現在我的代碼運行良好。 –

回答

0

爲什麼不這樣做,

>>> import pandas as pd 
>>> data = pd.DataFrame([[1, 0], [2, 4]], columns=['unit', 'test']) 
>>> data 
    unit test 
0  1  0 
1  2  4 
>>> data['test'] = 5 
>>> data 
    unit test 
0  1  5 
1  2  5 
>>> data['another_test'] = 6 
>>> data 
    unit test another_test 
0  1  5    6 
1  2  5    6