【问题标题】:Filtering with multiple conditions and creating new csv使用多个条件过滤并创建新的 csv
【发布时间】:2021-09-04 14:15:57
【问题描述】:

Look at the variations of code I tried here

我正在尝试使用 Pandas 过滤具有多个条件的行并创建一个仅包含这些行的新 csv 文件。我尝试了几种不同的方法,然后将这些尝试中的每一种都注释掉(有时为了简单起见,我只尝试了一个条件,但它仍然不起作用)。创建 csv 文件时,未应用过滤器。

This is my updated code 我让它适用于条件 #1,但我不确定如何添加/应用条件 #2。我尝试了很多不同的组合。我知道我放在链接图像中的代码不适用于应用第二个条件,因为我所做的只是分配变量,但尝试显示我尝试执行的所有方法似乎太麻烦了。这部分有什么提示吗?

    df = pd.read_csv(excel_file_path)

#condition #1
is_report_period = (df["Report Period"]=="2015-2016") | \
    (df["Report Period"]=="2016-2017") | \
        (df["Report Period"]=="2017-2018") | \
            (df["Report Period"]=="2018-2019")

#condition #2
is_zip_code = (df["Zip Code"]<"14800")

new_df = df[is_report_period]

【问题讨论】:

  • 您没有将过滤器分配给新的数据框,而只是重新创建原始数据框。我在注释掉的代码中看到了一个new_df 变量,取消注释代码并使用new_df.to_csv(filename) 或在进行过滤的代码前面添加df =
  • 谢谢@MichaelVine。我编辑了我的原始帖子并进行了更新。
  • 欢迎来到 SO!请添加代码 sn-ps 而不是代码图像 :)
  • @whereelse 您可以使用 pastebin 粘贴代码并在问题中添加链接而不是图像
  • 添加示例输入和所需输出也有助于查明错误! – @whereelse

标签: python pandas


【解决方案1】:

您可以通过使用 '&' 轻松实现此目的:

new_df = df[is_report_period & is_zip_code]

此外,您还可以使您的代码更具可读性和更易于应用更改 在使用此方法进行过滤时:

Periods = ["2015-2016","2016-2017","2017-2018","2018-2019"]
is_report_period = df["Report Period"].isin(Periods)

这样,您可以在需要时轻松更改过滤器,而且 更容易维护。

【讨论】:

  • 谢谢欧哈德。当我尝试使用“&”时,出现以下错误:TypeError: Invalid comparison between dtype=float64 and str
  • 嗨,这是因为您的 #2 条件将邮政编码作为字符串引用,但它们可能是数据框中的整数。您的代码:is_zip_code = (df["Zip Code"]
猜你喜欢
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
  • 2019-06-05
  • 2016-09-08
  • 1970-01-01
  • 2021-07-07
  • 2020-08-18
  • 2020-04-18
相关资源
最近更新 更多