【问题标题】:How do I .apply or .replace multiple columns at once in pandas?如何在 pandas 中一次 .apply 或 .replace 多个列?
【发布时间】:2020-06-14 06:37:15
【问题描述】:

下面的代码有效..

df['Forecast'] = df['Forecast'].apply(lambda x: '0' if x == '' else x)

df['Yield'] = df['Yield'].apply(lambda x: '0' if x == '' else x)

但是当我尝试一起做时,它不起作用

to_change = ['Forecast', 'Yield']

df[to_change] = df[to_change].apply(lambda x: '0' if x == '' else x)

它给出了以下错误:

ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

如何同时执行这些功能(替换或应用)而不为每一列编写新的代码行?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用pandas.DataFrame.replace 怎么样?

    to_change     = ['Forecast', 'Yield']
    df[to_change] = df[to_change].replace(to_replace='', value='0')
    #            or df[to_change].replace({'': '0'})
    

    测试过。


    插图。假设您将df 定义如下

    df = pd.DataFrame({
        '_else_'  : ['', '', ''],
        'Forecast': ['', 'y', 'o'],
        'Yield'   : ['k', '', 'm'],
    })
    

    即

    >>> df
      _else_ Forecast Yield
    0                     k
    1               y      
    2               o     m
    

    原来是这样做的

    >>> df[to_change] = df[to_change].replace({'': '0'})
    

    已将df更改如下

    >>> df
      _else_ Forecast Yield
    0               0     k
    1               y     0
    2               o     m
    

    【讨论】:

    • 感谢 df[to_change].replace({'': '0'}) 仅在我 replace({'': '0'} , regex=True) 时有效
    • 1.0.4 对不起,我的错。这是我尝试编码的第一周。这个例子工作得很好。我试图从产量和预测中的数字中删除逗号(由于某种原因是 str 格式),所以我使用了代码 df[to_change] = df[to_change].replace({',': ''}, regex=True) 。现在我将 astype(int) 列。
    猜你喜欢
    • 2021-05-21
    • 2019-09-30
    • 2014-06-28
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2018-05-06
    • 2011-11-26
    相关资源
    最近更新 更多