簡體   English   中英

Pandas:str.lower() 的 SettingWithCopyWarning

[英]Pandas: SettingWithCopyWarning for str.lower()

我想知道在嘗試將str.lower()應用於 pandas dataframe 中的列時如何處理 SettingWithCopyWarning ,因此我的所有數據,僅在該列上變為小寫。

我的實際代碼

df2["originator _ beliefs"]  = df2["originator _ beliefs"].str.lower()

我的錯誤:

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

我的其他嘗試:

df3["originator _ beliefs"]  = df2.loc[df2["originator _ beliefs"].str.lower()]
df3["originator _ beliefs"]  = df2["originator _ beliefs"].str.lower().copy()

我正在嘗試的只是小寫“創始人_信念”中的所有項目

這是一個警告,而不是錯誤。 運行代碼后檢查df2["originator _ beliefs"] 您應該看到它確實降低了您嘗試的列。 警告指的是您正在從推斷的df1 (這就是df2 )更改切片的副本,並且如果您嘗試更改df1 ,那么您不會。 有一些方法可以抑制警告,但這有點超出問題的 scope 。

In [36]: df = pd.DataFrame([[1, 'a'], [2, 'b']], columns=['num', 'char'])

In [37]: df
Out[37]:
   num char
0    1    a
1    2    b

In [38]: df1 = df[df.char == 'a']

In [39]: df1
Out[39]:
   num char
0    1    a

In [40]: df1['char'] = df1['char'].str.upper()
<ipython-input-40-0ba8b77332da>:1: 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: https://pandas.pydata.org/pandas-docs/stable/user_g
uide/indexing.html#returning-a-view-versus-a-copy
  df1['char'] = df1['char'].str.upper()

In [41]: df1
Out[41]:
   num char
0    1    A

In [42]: df
Out[42]:
   num char
0    1    a
1    2    b

一定要查看文檔以獲取更多信息: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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