使用条件从 CSV 文件中删除一行
Posted
技术标签:
【中文标题】使用条件从 CSV 文件中删除一行【英文标题】:Removing a row from CSV file with a condition 【发布时间】:2022-01-16 22:07:17 【问题描述】:enter image description here我需要有关如何删除每行的列中具有特定值的行的指导。例如,如果 A 列有 50 行,并且它在不同位置的值为 0。我想删除 CSV 文件中 A 列值为 0 的整行。 以下是我需要从中删除行的数据集。 第 1 行:1,95,90 第 2 行:1,85,76 第 3 行:0,100,71 第 4 行:0,100,24 第 5 行:1,100,76
我在 pandas 中尝试过 .drop 命令,但它不起作用。 亲切的指导将不胜感激。
【问题讨论】:
只是在 pandas 中的索引:df[df[column]!=0]
抱歉@thomask 在我回答之前没有看到你的评论!
亲爱的 Thomask,感谢您的友好指导。但是我遇到了同样的问题,因为这个命令对我不起作用。我将标题'A1'给了第一列,而索引设置为假,然后我使用了这个命令,即 df = df[df["A1"] != "0"] print(df) 但它给了我以下错误.请有任何想法.. --------------------------------- ------------------ KeyError Traceback (last last call last) 3084 如果容差不是 None: KeyError: 'A1'
【参考方案1】:
所以首先在 pandas 中加载文件:
df = pd.read_csv("name.csv")
然后是未找到该条件的子集,即 df 列 A 不等于 0 的 df:
df = df[df["A"] != 0]
【讨论】:
嗨,Sam,感谢您的友好回复和指导。我认为我已经足够接近了,但后来我遇到了另一个错误,可能是由于我看不到的任何小问题。我为第一列放置了名为“A1”的标题,然后使用了以下命令:df = df[df["A1"] != "0"] print (df) 但它不起作用并显示名为 KeyError: 'A1 的错误'你能在这方面帮忙吗? 能否提供代码?听起来好像没有正确分配列名! 是的。以下是代码: >>>df = pd.read_csv("output_file.csv") >>>df.to_csv("output_file.csv", header = ["A1", "A", "B", "C ", "D"], index = False) >>>new_df = df.drop(df.index[df["A1"] != 0]) >>>print (new_df) 我相信这是因为您正在保存 CSV 文件,而不是因为它存储在内存中而更改。因此,您尝试删除变量 df 的 A1 列,但变量 df 中不存在 A1,因为您还没有重新读取它。尝试在 new_df =... 行之前添加行 df = pd.read_csv("output_file.csv") 我也是这样做的。在帖子的第一行,我只是把代码的图片,如果你可以请审查。如果您有时间提供指导,请求您的电子邮件 ID 以分享代码的更多详细信息会很有帮助。谢谢【参考方案2】:您可以将 drop 函数与 inplace=True 一起使用,从而对 df 本身进行更改;
df.drop(0, inplace=True)
【讨论】:
您好 Kubra,感谢您的友好回复和指导。我试过这个命令,但它正在删除所有行。需要的是删除第一列中值等于 0 的整行。你能帮忙如何完成这项工作吗?【参考方案3】:如果使用convtools,则:
from convtools import conversion as c
from convtools.contrib.tables import Table
rows = (
Table.from_csv("tmp.csv", header=True)
.filter(c.col("A") != "0")
.into_csv("tmp-updated.csv")
)
表格帮助 - https://convtools.readthedocs.io/en/latest/tables.html
【讨论】:
以上是关于使用条件从 CSV 文件中删除一行的主要内容,如果未能解决你的问题,请参考以下文章