下面是一個答案的嘗試,或者至少試圖重現該消息。 (請注意,您只能得到這個消息後,可能需要啓動一個新的外殼或做%reset
在IPython中得到這個消息。)
In [1]: %reset
Once deleted, variables cannot be recovered. Proceed (y/[n])? y
In [2]: import pandas as pd
In [3]: pd.__version__
Out[3]: '0.16.0'
這裏有一個新的列設置爲「1」的3個變化。前兩個不會產生警告,但第三個會發出警告。 (第二個感謝@傑夫的建議)
In [4]: df = pd.DataFrame({ 'x':[1,2,3], 'y':[77,88,99] })
...: df['z'] = 1
In [5]: df = pd.DataFrame({ 'x':[1,2,3], 'y':[77,88,99] })
...: df = df[1:]
...: df['z'] = 1
In [6]: df = pd.DataFrame({ 'x':[1,2,3], 'y':[77,88,99] })
...: df2 = df[1:]
...: df2['z'] = 1
-c:3: 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 the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable
/indexing.html#indexing-view-versus-copy
也許別人可以糾正我,如果我錯了,但我相信在這裏的錯誤消息有關df2
是的df
片的副本。然而,這不是一個真正的問題,因爲所產生的df
和df2
是什麼,我本來期望:
In [7]: df
Out[7]:
x y
0 1 77
1 2 88
2 3 99
In [8]: df2
Out[8]:
x y z
1 2 88 1
2 3 99 1
我知道這將是可怕的說,但是當我得到消息,我剛剛檢查,看看是否該命令做了我想要或不想做的事情,不要過度考慮警告。但是不管你是否收到警告信息,檢查一個命令是否符合你的期望,這實際上是你需要在熊貓(或matlab,或R,或SAS,或Stata,...)中始終做的事情。
除非你提供一個完全獨立的例子中,我們無法分辨它是否是一個錯誤,或者如果它是你忽略的文檔很長一段時間,它的只有現在它已被揭示。 – DSM
我確實提供了這個例子。我加載一個數據框,然後是上面複製的單行代碼:mydataframe ['x'] = 1是觸發警告的那一行 –
對不起,但是如果'mydataframe'原來是你的原始df,而不是複製或片/那麼這個警告就不會出現,也就是SO *真的是這個地方呻吟的地方嗎?你不應該用MVCE發佈[github](https://github.com/pydata/pandas/issues)上的內容嗎? – EdChum