在 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
我想计算一行中零的数量。如果它有三个或更多零,则删除该行。删除所有包含三个或更多零的行后,导出新文件。
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