【发布时间】:2020-12-31 02:58:42
【问题描述】:
上下文
我正在尝试使用 MultiIndex 编写 Pandas DataFrame 的 csv 文件,如下所示:
import pandas as pd
import numpy as np
# Dirty generation of fake data
timestamps = [0, 30, 60]
valuesA = [{
0.1: 1,
0.2: 2,
0.3: 3},
{
0.1: 4,
0.2: 5,
0.3: 6},
{
0.1: 7,
0.2: 8,
0.3: 9}]
valuesB = [{
0.1: 1.5,
0.2: 2.5,
0.3: 3.5},
{
0.1: 4.5,
0.2: 5.5,
0.3: 6.5},
{
0.1: 7.5,
0.2: 8.5,
0.3: 9.5}]
A = pd.DataFrame(valuesA ,index= [pd.Timestamp(t, unit='s') for t in timestamps])
B = pd.DataFrame(valuesB ,index= [pd.Timestamp(t, unit='s') for t in timestamps])
# The actual DataFrame I'm working with
DATA = pd.concat([A,B],axis=1,keys=['A','B'], names=['Quantity','Position']).swaplevel(0,1,axis=1).sort_index(axis=1)
print(DATA)
打印输出如下:
Position 0.1 0.2 0.3
Quantity A B A B A B
1970-01-01 00:00:00 1 1.5 2 2.5 3 3.5
1970-01-01 00:00:30 4 4.5 5 5.5 6 6.5
1970-01-01 00:01:00 7 7.5 8 8.5 9 9.5
目标
如您所见,我的数据由两个索引组成:时间戳和位置。
我的目标是将其编写为一系列 csv 文件,每个时间戳一个文件,以及一个额外的时间戳/索引参考文件。
例如,csv 文件看起来像:
out_1.csv
Position, A, B
0.1, 1, 1.5
0.2, 2, 2.5
0.3, 3, 3.5
out_2.csv
Position, A, B
0.1, 4, 4.5
0.2, 5, 5.5
0.3, 6, 6.5
out_3.csv
Position, A, B
0.1, 7, 7.5
0.2, 8, 8.5
0.3, 9, 9.5
out_times.csv
index, time
1,0
2,30
3,60
问题
构建时间戳/索引参考文件没有问题。
另外,我实现了如上例中那样编写 csv 文件但仅使用非 MultiIndex 数据。但是,我认为我使用的方法(转置 DataFrame、在每一列上循环并使用 to_csv 方法)远不是最干净、最简单和整体上最好的解决方案。
很遗憾,我找不到使用 MultiIndex 数据的方法?
其他信息
最后,我知道数据生成示例远非漂亮,但这并没有像我的代码中那样实现 :) 我无法更改数据的写入方式,也无法更改生成数据的形状(DATA 在我的代码 sn-p 中)
最好,该代码将支持任意数量的“二级列索引”(即仅从 A 到 A、B、C, ... N)。但是第一层(Position和Quantity永远不会改变)
也许使用 dask 可能是解决方案?我试图了解如何使用它,但到目前为止还没有运气......
感谢您的热心帮助!
【问题讨论】:
标签: python pandas dataframe csv multi-index