如何从CSV文件中提取指定列?

3
我有一个包含约50列的csv文件,但我只需要其中的大约10列。我想从该csv文件中提取我需要的列到一个新的csv文件中。
这篇文章如何删除CSV文件中的列?中的最佳答案看起来正是我所需要的。
但是我需要每天都进行此操作,而生成大型CSV文件的系统可以按不同顺序导出列。因此,我需要能够按名称指定我需要的列,而不是按编号。
以下是CSV文件的示例:

File1.csv

name, description, cost, image, date
ABC, "super, mega", 12.87, ./imagefile, "12/11/2012 08:12"

File2.csv

name, cost, date, description, image
SYZ, 43.98, "16/11/2012 09:16", "Some text, and such", ./image2.jpeg

我希望保留名称、描述和图像字段,但如果我使用以下代码(根据@S.Lott的帖子派生而来):
import csv
with open("source","rb") as source:
rdr= csv.reader( source )
with open("result","wb") as result:
    wtr= csv.writer( result )
    for r in rdr:
        wtr.writerow( (r[0], r[1], r[3]) )

它只适用于第一个文件,而不是第二个文件。

1
你确定列名不会改变吗?今天是“image”,明天就变成“img”了吗? - monkut
列名不会改变,它们将始终保持相同。 - sibrich
2个回答

1
使用 pandas 的好处在于,它不仅可以轻松地以不同格式打开和保存文件、修改列和行,而且如果需要的话,还可以修改、计算和处理数据。
获取选定列的 csv 文件非常简单:
import pandas as p

df = p.read_csv('File2.csv')  # reads your csv file as a table (dataframe object)

df2 = df[['cost', 'date']]    # selects two of the columns in your file

df2.to_csv('my_out.csv')      # saves again in csv format

1

使用DictReader类读取它,然后您可以按名称而不是按索引编写字段。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接