【问题标题】:Is there any way to save and read multi-dimension data with efficiency?有没有什么方法可以高效的保存和读取多维数据?
【发布时间】:2017-03-07 06:08:19
【问题描述】:

简介

  • 我有一堆包含 1000 个站点的数据系列,每个站点都有 4 个特征(例如温度、风、二氧化碳浓度、太阳辐射)。

  • 所有功能都在时间序列中,具有每小时分辨率。

在 Pandas 的支持下,我在 .csv 文件中读取了这些数据。

现在我需要将它们保存并整理在一起以便更好地重复使用。

我的解决方案

我创建名为“sample_x,feature_y”的列。并且每一列都包含 sample_x 的 feature_y 的时间序列数据。

这种方法可行,但效率不高。因为我必须用长列名创建 4000 列。

我的问题

有没有更好的方法在 Python 中保存多维数据。我想要一个简单的解决方案,可以帮助我直接评估和处理特定数据。

感谢任何建议或解决方案!

【问题讨论】:

标签: python csv pandas multiple-columns


【解决方案1】:

我认为您可以使用MultiIndexPanel,然后在必要时将数据保存到hdf5

函数concat 也有参数keys,它从list of DataFrames 创建MultiIndex

示例:

df1 = pd.DataFrame({'A':[1,2,3],
                   'B':[4,5,6],
                   'C':[7,8,9],
                   'D':[1,3,5]})

print (df1)
   A  B  C  D
0  1  4  7  1
1  2  5  8  3
2  3  6  9  5

df2 = df1 * 10

dfs = [df1, df2]

df3 = pd.concat(dfs, keys=['a','b'])
print (df3)
      A   B   C   D
a 0   1   4   7   1
  1   2   5   8   3
  2   3   6   9   5
b 0  10  40  70  10
  1  20  50  80  30
  2  30  60  90  50

print (df3.index)
MultiIndex(levels=[['a', 'b'], [0, 1, 2]],
           labels=[[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]])

wp = pd.Panel({'a' : df1, 'b' : df2})
print (wp)
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 3 (major_axis) x 4 (minor_axis)
Items axis: a to b
Major_axis axis: 0 to 2
Minor_axis axis: A to D

【讨论】:

    【解决方案2】:

    您可能想要使用HDF,它专门设计用于处理大量多维数据。

    【讨论】:

    • 我已经学会了使用 HDF 文件。而且效果很好。
    【解决方案3】:

    最简单的答案可能就是创建一个sqlite3 数据库。

    听起来您每小时有 6 条数据(站、时间戳、功能 1..功能 4)乘以 1000 个站,乘以许多小时。

    所以这是 6000 个数据项(例如,每个 4 字节 = 24k),乘以 24 小时/天乘以 365 天/年 (* 8760),即每年大约 200mb。根据您要回溯多远,这对于 db 文件来说并不算太糟糕。 (如果你打算做超过 10 年,那么是的,去做更大的事情,或者压缩数据或按年分解数据等等......)

    【讨论】:

      猜你喜欢
      • 2023-01-18
      • 2021-01-04
      • 1970-01-01
      • 2019-05-13
      • 2020-12-24
      • 2017-10-14
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      相关资源
      最近更新 更多