【问题标题】:using pass in if statement in lambda function python在lambda函数python中使用传入if语句
【发布时间】:2021-02-05 20:14:59
【问题描述】:

我在 pandas 中有一个df,python 大部分是浮点值,但包含一些字符串,看起来像这样:

index  cashflow    date          changeinvalue
0      5000        2019-12-31    9300  
1      4000        2019-12-31    -4000  
2      -2000       2019-12-31    -9000  

我正在尝试使用 apply 函数和 lambda 函数将数据框中的所有值转换为绝对值。但是我认为我可能错误地使用了 lambda 函数,因为使用以下代码我收到以下错误:

df.apply(lambda x: abs(x) if isinstance(x, str) == False else pass)

SyntaxError: invalid syntax

有人可以帮助我吗? 谢谢

【问题讨论】:

    标签: python pandas lambda


    【解决方案1】:

    仅选择DataFrame.select_dtypes 的数字列并将它们转换为绝对值:

    cols = df.select_dtypes(np.number).columns
    df[cols] = df[cols].abs()
    print (df)
           cashflow        date  changeinvalue
    index                                     
    0          5000  2019-12-31           9300
    1          4000  2019-12-31           4000
    2          2000  2019-12-31           9000
    

    您的解决方案失败了,因为需要按元素进行测试,而不是按 apply 中的列。

    所以如果需要单独测试每个值使用DataFrame.applymap,然后测试数字intfloat 的绝对值并且所有其他值都不会改变(所以返回):

    df = df.applymap(lambda x: abs(x) if isinstance(x, (int, float)) else x)
    

    【讨论】:

    • 值得一提的是为什么 OP 的代码会出错。 pass 问题。
    【解决方案2】:

    你可以的

    df.columns = df.columns.abs()
    

    应该可以的。

    【讨论】:

      【解决方案3】:

      应用每列应该可以完成这项工作。

      df.columns = df.columns.abs()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-20
        • 2017-01-17
        • 1970-01-01
        • 2023-04-03
        • 2023-04-07
        • 2016-05-13
        • 2020-06-09
        相关资源
        最近更新 更多