【问题标题】:Python : big csv file importPython:大 csv 文件导入
【发布时间】: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 数据集,它会读取吗?如果是,你应该考虑大卫评论

标签: python csv time-series financial spyder


【解决方案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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      相关资源
      最近更新 更多