Python:大 csv 文件导入

Posted

技术标签:

【中文标题】Python:大 csv 文件导入【英文标题】:Python : big csv file import 【发布时间】:2012-06-24 13:19:28 【问题描述】:

我目前尝试使用 Python 导入大型 csv 数据集未成功。基本上,我有一个由股票报价组成的大 csv 文件(一列股票,每只股票的另一列包含股息)。我正在使用 csv 模块,但事实是我无法得到一个 np.array 哪些列是股票报价。Python 按行创建一个 np.array,我想要一个按列的 np.array。我该怎么办??

谢谢你的帮助!!

【问题讨论】:

Python 的 csv 模块使用生成器来迭代数据。如果你试图在一个 numpy 数组中存储一个巨大的数据集并且失败了,你可能根本没有足够的 RAM。 您的数据是什么样的?你尝试了什么?它是如何失败的? 您可以按行创建 numpy 数组,然后将其转置 (myarray = myarray.T),或者,如果您使用 np.array(columns) 初始化数组,则可以将其更改为 np.array(zip(*columns)) 如果您使用小型 csv 数据集,它会读取吗?如果是,你应该考虑大卫评论 【参考方案1】:

我建议使用Pandas 库。它还使您能够按较小的块读取大的 csv 文件。这是文档中的一个示例:

数据:

year indiv zit xit
0 1977 A 1.2 0.60
1 1977 B 1.5 0.50
2 1977 C 1.7 0.80
3 1978 A 0.2 0.06
4 1978 B 0.7 0.20
5 1978 C 0.8 0.30
6 1978 D 0.9 0.50

指定块大小(你得到一个可迭代的):

reader = read_table(’tmp.sv’, sep=’|’, chunksize=4)


for chunk in reader:
.....: print chunk

输出:

year indiv zit xit
0 1977 A 1.2 0.60
1 1977 B 1.5 0.50
2 1977 C 1.7 0.80
3 1978 A 0.2 0.06
year indiv zit xit
0 1978 B 0.7 0.2
1 1978 C 0.8 0.3
2 1978 D 0.9 0.5

注意!如果您需要进一步处理您的股票数据,Pandas 是最好的选择。

【讨论】:

【参考方案2】:

我已经创建了一小块函数,它可以读取 csv 文件的路径并立即返回 dict 列表,然后您可以很容易地遍历列表,

def read_csv_data(path):
    """
        Reads CSV from given path and Return list of dict with Mapping
    """
    data = csv.reader(open(path))
    # Read the column names from the first line of the file
    fields = data.next()
    data_lines = []
    for row in data:
        items = dict(zip(fields, row))
        data_lines.append(items)
    return data_lines

也许这会对你有所帮助

问候

【讨论】:

感谢您的回答。我无法得到我想要的,所以我会更精确。这是我的数据库的样子:【参考方案3】:

您正在寻找的是ndarray.shapendarray.reshape 函数。

http://www.scipy.org/Tentative_NumPy_Tutorial

否则,你可以简单地按照你的方式阅读它,然后通过做一个转置

x = x.transpose() 

其中 x 是一个 ndarray。

http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.transpose.html

所有这些小东西通常都在文档中。我建议先仔细阅读这些内容。

【讨论】:

以上是关于Python:大 csv 文件导入的主要内容,如果未能解决你的问题,请参考以下文章

python如何导入数据

大文件csv与小文件导入mysql的表中(图形化命令都有)

R 中的 fread 将一个大的 .csv 文件导入为一行的数据框

vscode怎么导入读取csv文件数据

大数据量.csv文件导入SQLServer数据库

mongodb mongoimport导入CSV文件