使用条件从 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 文件中删除一行的主要内容,如果未能解决你的问题,请参考以下文章

使用 Powershell 从文件中删除最后一行

用于删除 CSV 文件第一行的 Unix 脚本

使用“总计”信息删除 csv 文件中的最后一行

从Python中的csv文件中删除第一列[重复]

cmd去除csv首行

在 Perl 中,如何从文件中删除 ^M?