【问题标题】:Using an or statement in a conditional list comprehension to filter columns in a dataframe在条件列表推导中使用 or 语句来过滤数据框中的列
【发布时间】:2019-12-09 00:52:00
【问题描述】:

我正在尝试过滤数据框中包含字母“R”或“H”的列。

当我只搜索 1 个字母时代码有效,但当我添加 or 语句时它返回所有列。

我想知道是否可以在列表推导中使用 or 。这是我的代码:

data = pd.read_csv(filename)
data_sorted = data.sort_values('Timestamp', ascending=False)
four_dec_cols = [col for col in data_sorted if 'H' in col]

失败的代码:

four_dec_cols = [col for col in data_sorted if 'RB' or 'H' in col]

最终,我想将包含“H”或“R”的列四舍五入到小数点后 4 位,其余所有列到小数点后 2 位,所以如果有更直接的方法可以做到这一点,我会很感激这个建议.

非常感谢!

编辑: 所以理想情况下 - 我想返回这个数据框,其中包含 RB 或 H 的任何列四舍五入到小数点后 4 位,其他所有内容都四舍五入到 2。

【问题讨论】:

  • 您在寻找'R' 还是'RB'

标签: python pandas list conditional-statements


【解决方案1】:

怎么样:

cols = df.columns[df.columns.str.contains('RB|H')]

【讨论】:

  • 这样更好!除了这两列之外,是否有一个 notcontains 或类似的方法来获取所有内容?
  • 有一个否定~:~df.columns.str.contains('RB|H')
  • 最后一个问题:返回一个索引对象。对这些列应用小数点后 2 位的最有效方法是什么
  • df[cols] = df[cols].round(2)?
  • 只返回包含那些四舍五入的字母的列 - 没有其他列。不过没关系-这是一个单独的问题-我会尝试弄清楚。再次感谢!
【解决方案2】:

您当前的代码检查'RB' 是否为真(存在)并因此返回所有列。试试:

four_dec_cols = [col for col in data_sorted if 'RB' in col or 'H' in col]

【讨论】:

    猜你喜欢
    • 2015-06-10
    • 2021-07-10
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多