【问题标题】:How to delete rows from a csv file?如何从 csv 文件中删除行?
【发布时间】:2019-11-25 15:20:58
【问题描述】:

我能够从 CSV 文件中提取我想删除的行,但我无法使 drop() 函数工作。

data = pd.read_csv(next(iglob('*.csv')))
data_top = data.head()
data_top = data_top.drop(axis=0)

需要补充什么?

CSV 文件示例。它应该删除所有内容,直到到达 Employee 列。

creation date         Unnamed: 1       Unnamed: 2
0            NaN   type of client         NaN
1            age             NaN          NaN
2            NaN      birth date          NaN
3            NaN             NaN       days off
4       Employee          Salary       External
5            Dan            130e          yes
6        Abraham             10e           no
7       Richmond            201e      third-party

【问题讨论】:

  • 您想从数据框中删除行还是从您创建数据框的 csv 文件中删除行?
  • 目的是从 CSV 文件中删除行。但是,如果我可以从数据框中删除这些行,我就知道如何将信息从数据框中“传输”到 CSV 文件中。
  • this?的可能重复
  • 好的。所以从代码来看,你要做的是将CSV文件作为数据框读取,并从中删除前5行并将其存储回CSV?
  • 你是对的!!

标签: python pandas csv dataframe


【解决方案1】:

如果只是你要删除的前5行,那么你可以这样做:

data = pd.read_csv(next(iglob('*.csv')))
data.drop([0,1,2,3,4], axis=0, inplace=True)

对于轴,您还应该传递单个标签或列表(列名或行索引)。

当然,还有许多其他方法可以实现这一目标。特别是如果您要删除的行的索引不只是前 5 个。

edit: 就地添加,如 cmets 中指出的那样。

【讨论】:

  • 你也可以在 drop 方法中使用 'inplace' = True ,这样你就不用再创建变量了
  • 实际上,我想要实现的目标非常复杂。 (至少对于像我这样的初学者)。我正在尝试从 CSV 文件中删除所有行和列,直到它到达名为“Employees”的列。所以我很幸运,这个没有参数的 head() 函数与我当前的文件格式匹配 - 因为现在它包含 5 行,直到“员工”单元格,但将来不会是这种情况。
  • @zimskiz 对于这个特殊的用例,这段代码 sn-p 将起作用。
  • 能否请您显示数据框的第一行。 read_csv 方法非常灵活,您可以根据需要读取特定的列。
  • 最初的问题用一个例子进行了更新。 skiprows 不是一个好的选择,因为行数可能因文件而异。
【解决方案2】:

考虑到评论和进一步的解释,假设您知道列的名称,并且您有位置索引,您可以尝试以下操作:

data = pd.read_csv(next(iglob('*.csv')))
row = data[data['creation date'] == 'Employee']
n = row.index[0]
data.drop(labels=list(range(n)), inplace=True)

主要目标是找到包含值“Employee”的行的索引。为此,假设没有其他行包含该单词,您可以过滤数据框以匹配特定列中的相关值。
之后,您提取索引值,您将使用它来创建一个标签列表(给定一个位置索引),您将删除数据框,正如@MAK7 在他的回答中所说。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 2018-08-15
    相关资源
    最近更新 更多