【问题标题】:removing items from current csv and saving it into another csv file从当前 csv 中删除项目并将其保存到另一个 csv 文件中
【发布时间】:2015-06-14 08:42:35
【问题描述】:

我有一个包含 1000 个条目的 csv 文件(由制表符分隔)。我只列出了前几个。

    Unique ID   Name
 0  60ff3ads    Keith
 1  C6LSI545    Shawn
 2  O87SI523    Baoru
 3  OM022SSI    Naomi
 4  3LLS34SI    Alex
 5  Z7423dSI    blahblah

我想通过索引号从这个 csv 文件中删除其中一些条目并将其保存到另一个 csv 文件中。

我还没有开始为此编写任何代码,因为我不确定我应该如何去做。请指教。

【问题讨论】:

标签: python csv pandas


【解决方案1】:

单线解决您的问题:

import pandas as pd

indexes_to_drop = [1, 7, ...]
pd.read_csv('original_file.csv', sep='\t').drop(indexes_to_drop, axis=0).to_csv('new_file.csv')

如果需要,请查看 read_csv 文档以适应您的特定 CSV 风格

【讨论】:

    【解决方案2】:

    示例数据建议使用制表符分隔的文件。您可以使用csv.reader 打开输入文件,并使用csv.writer 打开输出文件。但是,如果您只是使用split() 来获取第一个字段(索引)并将其与您想要过滤掉的那些索引进行比较,它会稍微简单一些。

    indices_to_delete = ['0', '3', '5']
    
    with open('input.csv') as infile, open('output.csv', 'w') as outfile:
        for line in infile:
            if line.split()[0] not in indices_to_delete:
                outfile.write(line)
    

    这可以简化为:

    with open('c.csv') as infile, open('output.csv', 'w') as outfile:
        outfile.writelines(line for line in infile
                               if line.split()[0] not in indices_to_delete)
    

    在这种情况下,对于您发布的那种数据,这应该可以解决问题。如果您发现需要比较其他包含空格的字段中的值,则应考虑使用csv 模块。

    【讨论】:

      【解决方案3】:

      我认为删除线是不可能的。但是,您可以编写两个新文件。因此,请查看原始 csv 的每一行。接下来,将每一行保存到 csv-A 或 csv-B。这样你最终会得到两个单独的 csvfile。

      更多信息在这里:How to Delete Rows CSV in python

      【讨论】:

      • 嗯.. 我也在通过 stackoverflow 搜索有关如何从 csv 文件中删除行的想法.. 但没有运气.. 这可能是唯一的方法吧?
      猜你喜欢
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      相关资源
      最近更新 更多