簡體   English   中英

Pandas,系列 str 訪問器和 SettingWithCopyWarning

[英]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這個操作修改后。

有人可以幫我解決這個問題嗎?

您的問題不在此指令中,而是在代碼中的某個位置。

我做了這樣的實驗:

  1. 我創建了一個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
  2. 然后我將其中的一些行“復制”到test_msg

     test_msg = df[:2]

    包含來自df的前 2 行。 但請注意,我實際上沒有進行任何復制(沒有創建新的 DataFrame)。 test_msg只是df的一個視圖,即test_msgdf使用的緩沖區中提取數據。

  3. 現在,當您嘗試修改此數據(參考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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM