【问题标题】:Pandas: SettingWithCopyWarning for str.lower()熊猫:str.lower() 的 SettingWithCopyWarning
【发布时间】:2020-12-03 18:29:29
【问题描述】:

我想知道在尝试将 str.lower() 应用于 pandas 数据框中的列时如何处理 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()

我正在尝试将“originator_beliefs”中的所有项目都小写

【问题讨论】:

    标签: python pandas error-handling


    【解决方案1】:

    这是一个警告,而不是错误。运行代码后检查df2["originator _ beliefs"];您应该看到它确实降低了您尝试的列。警告是指您正在从推断的df1(这是df2 的内容)更改切片的副本,并且如果您尝试更改df1,您不会这样做。有一些方法可以抑制警告,但这有点超出了问题的范围。

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-25
      • 2017-12-23
      • 2016-11-03
      • 2019-11-06
      • 2015-02-23
      • 1970-01-01
      相关资源
      最近更新 更多