【问题标题】:export to csv and read multiIndex dataframe pandas导出到 csv 并读取 multiIndex 数据框 pandas
【发布时间】:2019-06-15 00:39:27
【问题描述】:

我需要导出到 csv,然后再次导入如下所示的 DataFrame:

    price   ................................................................................................................... hold buy    balance long_size   short_size  minute  hour    day week    month
                       close    high    low open    CCI12   ROC12   CCI15   ROC15   CCI21   ROC21   ...                                     
Time                                                                                    
2015-01-02 14:20:00 97.8515 97.8595 97.8205 97.8345 91.168620   0.000557    95.323467   0.000394    68.073065   0.000348    ... 0.0 0.0 0.0 0.0 0.0 8.660254e-01    -0.500000   0.974928    1.205367e-01    5.000000e-01

其中行索引由时间戳表示,前 39 列是“价格”的子列,而其余列与“价格”处于同一级别。 multiIndex 看起来像这样

 MultiIndex(levels=[['price', 'tick_counts', 'sell', 'hold', 'buy', 'balance', 'long_size', 'short_size', 'minute', 'hour', 'day', 'week', 'month'], [0, 'close', 'high', 'low', 'open', 'CCI12', 'ROC12', 'CCI15', 'ROC15', 'CCI21', 'ROC21', 'CCI30', 'ROC30', 'CCI40', 'ROC40', 'CCI100', 'ROC100', 'SMA12', 'EWMA12', 'SMA21', 'EWMA21', 'SMA26', 'EWMA26', 'SMA50', 'EWMA50', 'SMA100', 'EWMA100', 'SMA200', 'EWMA200', 'MACD', 'UpperBB10', 'LowerBB10', 'UpperBB20', 'LowerBB20', 'UpperBB30', 'LowerBB30', 'UpperBB40', 'LowerBB40', 'UpperBB50', 'LowerBB50', '']],
           labels=[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40]])

我不知道如何在使用 df.to_csv() 导出和使用 df.read_csv() 导入时轻松保留此结构。到目前为止,我所有的尝试都是一团糟。

编辑:如果我只是按照建议使用 pd.to_csv("/", index=True) 然后我用 read_csv("/") 读回它,我得到:

Unnamed: 0  price   price.1 price.2 price.3 price.4 price.5 price.6 price.7 price.8 ... hold    buy balance long_size   short_size  minute  hour    day week    month
0   NaN close   high    low open    CCI12   ROC12   CCI15   ROC15   CCI21   ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1   Time    NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2   2015-01-02 14:20:00 97.85149999999999   97.8595 97.82050000000001   97.83449999999999   91.16862020296143   0.0005572768080819476   95.32346677471595   0.0003936082115872622   68.07306512447788   ... 0.0 0.0 0.0 0.0 0.0 8.660254e-01    -0.500000   0.974928    1.205367e-01    5.000000e-01

header 的第二层变成了 dataFrame 的第一行。

EDIT2:没关系,我刚刚发现了 hdf5,显然,与 csv 不同,即使使用 multiIndex 也无需额外工作,它也能保留结构,所以我将使用 pd.to_hdf()。

【问题讨论】:

  • 您没有正确读取 CSV。你需要在你的电话read_csv中指定header=[0,1]
  • 保存 CSV 而不保存索引,然后简单地自己设置索引?或者通过在pd.read_csv 中传递index_col

标签: python pandas export-to-csv


【解决方案1】:

我想如果你使用 - pd.to_csv("/", index=True) 它用索引保存它,然后正常读取。

【讨论】:

  • 不幸的是,这样,当我用 read_csv() 读回它时,它会将名字层作为标题放置,如“price.1,price.2...price.39”,然后是第一层名称的其余部分为“持有、买入、卖出等”。但是列的第二个名称成为数据帧的第一行,而行索引“时间”的名称成为数据帧的第二行。我会把它添加到我的帖子中。
猜你喜欢
  • 2018-11-12
  • 2021-02-10
  • 1970-01-01
  • 2022-12-07
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 2016-09-18
  • 2019-07-19
相关资源
最近更新 更多