【问题标题】:Pandas Can't avoid SettingWithCopyWarning熊猫无法避免 SettingWithCopyWarning
【发布时间】:2017-02-12 16:31:14
【问题描述】:

我有一个这样的数据框:

A     B     C

15   'ds'   '    0.000'
32   'ds'   '    1.000'
56   'ds'   '    2,700.000'
45   'gb'   '    7.000'

我想将C 列的值更改为整数;所以我正在做的是这样的:

df.loc[:,'C'] = df.loc[:,'C'].apply(lambda x: int(float(x.strip().replace(',',''))))

这可以完成工作,但是,我觉得烦人的SettingWithCopyWarning。如果我使用loc,为什么会出现这种情况?

【问题讨论】:

    标签: python pandas warnings


    【解决方案1】:

    Pandas 在某些情况下会以误报发出此警告(即,根据分配的顺序,您可以分配给副本,但在当前情况下不是)。这个答案很有帮助:How to deal with SettingWithCopyWarning in Pandas?

    ...但是,就我个人而言,当我使用.loc 并且仍然收到警告时,我会采取上述答案中提供的步骤并禁用警告: pd.options.mode.chained_assignment = None

    【讨论】:

      【解决方案2】:

      我会使用以下方法:

      In [292]: df['C'] = pd.to_numeric(df['C'].str.strip().str.replace(',', ''), errors='coerce')
      
      In [293]: df
      Out[293]:
          A   B       C
      0  15  ds     0.0
      1  32  ds     1.0
      2  56  ds  2700.0
      3  45  gb     7.0
      
      In [294]: df.dtypes
      Out[294]:
      A      int64
      B     object
      C    float64
      dtype: object
      

      【讨论】:

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