使用Python读取csv文件的第i列的最佳方法是什么?

时间:2013-05-31 18:21:10

标签: python r python-2.7 csv import-from-csv

我习惯于R提供快速功能来逐列读取CSV文件,任何人都可以提出一种快速高效的方式来读取python中的大数据(例如CSV)文件吗?例如,CSV文件的i th 列。

我有以下内容,但需要时间:

    import os,csv, numpy, scipy
    from numpy import *
    f= open('some.csv', 'rb') 
    reader = csv.reader(f, delimiter=',')
    header = reader.next()
    zipped = zip(*reader)
    print( zipped[0] ) # is the first column

有没有更好的方法来读取python中的数据(来自大文件)(至少在内存方面与R一样快)?

2 个答案:

答案 0 :(得分:5)

您还可以使用pandas.read_csv及其use_cols参数。见here

import pandas as pd

data = pd.read_csv('some.csv', use_cols = ['col_1', 'col_2', 'col_4'])
...

答案 1 :(得分:2)

import csv

with open('some.csv') as fin:
    reader = csv.reader(fin)
    first_col = [row[0] for row in reader]

您正在使用zip执行的操作是将整个文件加载到内存中,然后将其转置以获取col。如果您只想要列值,只需在列表中包含该值即可。

如果您想要多列,那么您可以这样做:

from operator import itemgetter
get_cols = itemgetter(1, 3, 5)
cols = map(get_cols, reader)