[英]Pandas, series str accessor and SettingWithCopyWarning
我有名為“ test_msg ”的數據框,其中包含以下列: SMS - 消息文本, Label - 如果是垃圾郵件或非垃圾郵件(火腿)
每當我做這樣的事情時:
test_msg['SMS'] = test_msg['SMS'].str.replace('\W', ' ') #get rid of non-word characters
我得到了 SettingWithCopyWarning。 不知何故,我設置了要復制的值,但我不確定這個問題出在哪里。 我原來的dataframe這個操作修改后。
有人可以幫我解決這個問題嗎?
您的問題不在此指令中,而是在代碼中的某個位置。
我做了這樣的實驗:
我創建了一個源DataFrame ( df ),包含 3 行:
SMS Label 0 Acdf xxx rr 10_20 1 1 BBbb xxx aa 20_30 1 2 Ccccc##?& ax^ax*ax. aa$ 20_30 1
然后我將其中的一些行“復制”到test_msg :
test_msg = df[:2]
包含來自df的前 2 行。 但請注意,我實際上沒有進行任何復制(沒有創建新的 DataFrame)。 test_msg只是df的一個視圖,即test_msg從df使用的緩沖區中提取數據。
現在,當您嘗試修改此數據(參考test_msg )時,會出現SettingWithCopyWarning警告。
為了解決這個問題,創建test_msg例如使用loc :
test_msg = df.loc[:2]
然后test_msg是一個 DataFrame 有自己的數據緩沖區(這次你只是做了一個副本),所以現在你可以運行你有問題的指令而沒有警告(自己試試)。
另一種選擇是使用copy()方法:
test_msg = df[:2].copy()
結果相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.