在 Python 中,检查每一行中的零,如果行中有 3 个或更多零,则删除该行。当前代码对文件没有任何作用

In Python, check for zeros in each row, if row has 3 or more zeros, remove the row. Current code does nothing to the file

我想计算一行中零的数量。如果它有三个或更多零,则删除该行。删除所有包含三个或更多零的行后,导出新文件。

CSV:

Year 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022
Person_A .00 .00 .00 .00 [=13=].00 .00 [=13=].00 [=13=].00 .00 [=13=].00 .00 [=13=].00 .00
Person_B 0.00 0.00 .00 .00 [=13=].25 0.00 [=13=].00 .00 .00 .00 [=13=].00 [=13=].00 00.00

想要的结果:

Year 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022
Person_B 0.00 0.00 .00 .00 [=14=].25 0.00 [=14=].00 .00 .00 .00 [=14=].00 [=14=].00 00.00

当前代码对文件没有任何作用。我有我认为的零计数,如果超过 3 个则删除该行,但是 File.csv 和 NewFile.csv 的行数相同:

import pandas as pd

df = pd.read_csv("C:/Users/File.CSV" , encoding = "ISO-8859-1") # import csv as DataFrame

df_new = df.loc[df.eq(0).sum(1).le(3),] # Look for zeros, if more than 3, remove row

df_new.to_csv( "C:/Users/Folder/NewFile.CSV", index=False ) # Export new file

我也尝试过这个,但同样没有对文件进行任何更改:


df = pd.read_csv("C:/Users/File.CSV" , encoding = "ISO-8859-1") # import csv as DataFrame

df_new = df[df.eq('[=12=].00').sum(1) <= 3] # Look for zeros, if more than 3 remove row

df_new.to_csv( "C:/Users/Folder/NewFile.CSV", index=False ) # Export new file

更新

df = pd.read_csv('GiftYearTotal.csv', encoding='ISO-8859-1')
df = df.apply(lambda x: x.str.strip())
out = df[df.eq('[=10=].00').sum(1) <= 3]

旧答案

您可以使用:

out = df[df.eq('[=11=].00').sum(1) <= 3]
print(out)

# Output
       Year     2010     2011   2012    2013   2014     2015   2016    2017    2018    2019   2020   2021      2022
1  Person_B  0.00  0.00  .00  .00  [=11=].25  0.00  [=11=].00  .00  .00  .00  [=11=].00  [=11=].00  00.00