【问题标题】:I want to convert very large csv data to hdf5 in python我想在 python 中将非常大的 csv 数据转换为 hdf5
【发布时间】:2019-11-28 22:51:22
【问题描述】:

我有一个非常大的 csv 数据。看起来像这样。

[日期,公司名称,值 1,值 2,...,值 60]

我想把它转换成 hdf5 文件。例如,假设我有两个日期(2019-07-01、2019-07-02),每个日期有 3 个公司(公司 1、公司 2、公司 3),每个公司都有 [值 1,值 2,. .. 值 60]。

我想使用日期和公司名称作为一个组。具体来说,我想要这个层次结构:“日期/公司名称”。

例如,2019-07-01 有公司 1、公司 2 和公司 3。当您查看每个公司时,有很多 [value 1, values 2, ... value 60]。

有什么想法吗?

提前致谢。

【问题讨论】:

标签: python hdf5 h5py pytables


【解决方案1】:

有很多方法可以解决这个问题。在我展示一些代码之前,一个建议:仔细考虑你的数据模式。这很重要。它将影响您访问和使用数据的难易程度。例如,您建议的模式可以轻松访问一个公司在一个日期的数据。如果您想要一家公司在多个日期范围内的所有数据怎么办?或者你想要所有公司的所有数据在一个日期?两者都需要您在访问数据后操作多个数组。

虽然反直觉,但您可能希望将 CSV 数据存储为单个组/数据集。我将在下面的 2 种方法中分别展示一个示例。以下两种方法都使用np.genfromtxt 来读取 CSV 数据。可选参数 names=True 将从 CSV 文件的第一行读取标题(如果有)。如果您没有标题行,请省略 names=,您将获得默认字段名称(f1, f2, f3, etc)。我的示例数据包含在末尾。

方法一:使用h5py
组名:日期
数据集名称:公司

import numpy as np
import h5py

csv_recarr = np.genfromtxt('SO_57120995.csv',delimiter=',',dtype=None, names=True, encoding=None)
print (csv_recarr.dtype)

with h5py.File('SO_57120995.h5','w') as h5f :

    for row in csv_recarr:   
        date=row[0]
        grp = h5f.require_group(date)

        firm=row[1]
    # convert row data to get list of all valuei entries
        row_data=row.item()[2:]
        h5f[date].create_dataset(firm,data=row_data)

方法二:使用 PyTables
数据集中存储的所有数据:/CSV_Data

import numpy as np
import tables as tb

csv_recarr = np.genfromtxt('SO_57120995.csv',delimiter=',',dtype=None, names=True, encoding=None)
print (csv_recarr.dtype)

with tb.File('SO_57120995_2.h5','w') as h5f :
    # this should work, but only first string character is loaded:
    #dset = h5f.create_table('/','CSV_Data',obj=csv_recarr)
    # create empty table
    dset = h5f.create_table('/','CSV_Data',description=csv_recarr.dtype)

    #workaround to add CSV data one line at a time
    for row in csv_recarr:
        append_list=[]
        append_list.append(row.item()[:])
        dset.append(append_list)

# Example to extract array of data based on field name
    firm_arr = dset.read_where('Firm==b"Firm1"')
    print (firm_arr)

示例数据:

Date,Firm,value1,value2,value3,value4,value5,value6,value7,value8,value9,value10
2019-07-01,Firm1,7.634758e-01,5.781637e-01,8.531480e-01,8.823769e-01,5.780567e-01,3.587480e-01,4.065076e-01,8.520372e-02,3.392133e-01,1.104916e-01
2019-07-01,Firm2,6.457887e-01,6.150677e-01,3.501075e-01,8.886556e-01,5.379832e-01,4.561159e-01,4.773242e-01,7.302280e-01,6.018719e-01,3.835672e-01
2019-07-01,Firm3,3.641129e-01,8.356681e-01,7.783146e-01,1.735361e-01,8.610319e-01,1.360989e-01,5.025533e-01,5.292365e-01,4.964461e-01,7.309130e-01
2019-07-02,Firm1,4.128258e-01,1.339008e-01,3.530394e-02,5.293509e-01,3.608783e-01,6.647519e-01,2.898612e-01,5.632466e-01,5.981161e-01,9.149318e-01
2019-07-02,Firm2,1.037654e-01,3.717925e-01,4.876283e-01,5.852448e-01,4.689806e-01,2.508458e-01,7.243468e-02,3.510882e-01,8.290331e-01,7.808357e-01
2019-07-02,Firm3,8.443163e-01,5.408783e-01,8.278920e-01,8.454836e-01,7.331165e-02,4.167235e-01,6.187155e-01,6.114338e-01,2.299935e-01,5.206390e-01
2019-07-03,Firm1,2.281612e-01,2.660087e-02,3.809895e-01,8.032823e-01,2.492683e-03,9.600432e-02,5.059484e-01,1.795972e-01,2.174838e-01,3.578077e-01
2019-07-03,Firm2,2.403236e-01,1.497736e-01,7.357259e-01,2.501746e-01,2.826287e-01,3.335158e-01,7.742914e-01,1.773830e-01,8.407694e-01,7.466135e-01
2019-07-03,Firm3,8.806318e-01,1.164414e-01,6.791358e-01,4.752967e-01,3.695451e-01,9.728813e-01,3.553896e-01,2.559315e-01,6.942147e-01,2.701471e-01
2019-07-04,Firm1,2.153168e-01,5.169252e-01,5.136280e-01,7.517068e-01,1.977217e-01,7.221689e-01,5.877799e-01,9.099813e-02,9.073012e-03,5.946624e-01
2019-07-04,Firm2,8.275230e-01,9.725115e-01,5.218725e-03,7.728741e-01,4.371698e-01,3.593862e-02,3.448388e-01,7.443235e-01,2.606604e-01,9.888835e-02
2019-07-04,Firm3,8.599242e-01,8.336458e-01,1.451350e-01,9.777518e-02,3.335788e-01,1.117006e-01,9.105203e-01,3.478112e-01,8.948065e-01,3.105299e-01

【讨论】:

    猜你喜欢
    • 2015-01-27
    • 2019-12-02
    • 2022-12-04
    • 1970-01-01
    • 2021-05-31
    • 2018-11-19
    • 2014-03-07
    • 2015-09-04
    • 2016-12-13
    相关资源
    最近更新 更多