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.shape
和ndarray.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 文件导入的主要内容,如果未能解决你的问题,请参考以下文章