【发布时间】: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