从当前csv中删除项目并将其保存到另一个csv文件中

时间:2015-06-14 08:42:35

标签: python csv pandas

我有一个csv文件,其中有1000个条目(由选项卡分隔)。我只列出了前几个。

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

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

我还没有开始为此编写任何代码,因为我不确定应该怎么做...请劝告。

3 个答案:

答案 0 :(得分: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 doc以适应您特定的CSV风格(如果需要)

答案 1 :(得分:0)

示例数据建议使用制表符分隔文件。您可以使用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模块。

答案 2 :(得分:-1)

我不认为可以删除线条。但是,您可以编写两个新文件。因此,请查看原始csv的每一行。接下来,对于每一行,将其保存到csv-A或csv-B。这样你就得到了两个独立的csvfiles。

此处有更多信息:How to Delete Rows CSV in python