使用多索引列写入和读取 pandas 数据帧

Nak*_*kor 11 python pandas

我正在尝试保存和加载pandas包含列的 MultiIndex(2 级索引)的 DataFrame。我在保存和加载数据帧时遇到问题(如果可能的话,我希望在重新加载数据帧时拥有完全相同的数据帧)

我的数据框如下所示:

> df.head()
         A                   B
        sp start  end       sp start  end
0  V5894_1   243  251  V5894_1   243  251
1  V5894_1   244  252  V5894_1   244  252
2  V5894_1   244  252  V5894_1   244  252
3  V3246_0    28   36  V3246_0    28   36
4  V3246_0    29   37  V3246_0    29   37
Run Code Online (Sandbox Code Playgroud)

我现在尝试的是常规的df.to_csv("test.csv"),然后用 加载它df.read_csv("test.csv",index_col=[0,1])

当我保存它时,.csv 文件如下所示:

,A,A,A,B,B,B
,sp,start,end,sp,start,end
0,V5894_1,243,251,V5894_1,243,251
1,V5894_1,244,252,V5894_1,244,252
2,V5894_1,244,252,V5894_1,244,252
3,V3246_0,28,36,V3246_0,28,36
Run Code Online (Sandbox Code Playgroud)

所以我已经觉得这个结构可能已经有点破损了。

当我使用前面的命令加载它时,我得到:

                   A.1  A.2        B    B.1  B.2
        A
NaN     sp       start  end       sp  start  end
0.0     V5894_1    243  251  V5894_1    243  251
1.0     V5894_1    244  252  V5894_1    244  252
2.0     V5894_1    244  252  V5894_1    244  252
3.0     V3246_0     28   36  V3246_0     28   36
Run Code Online (Sandbox Code Playgroud)

如您所见,我丢失了 MultiIndex 列结构。

我也尝试加载

pd.read_csv("test.csv",index_col=0)
Run Code Online (Sandbox Code Playgroud)

但我仍然没有得到预期的结果:

           A    A.1  A.2        B    B.1  B.2
NaN       sp  start  end       sp  start  end
0.0  V5894_1    243  251  V5894_1    243  251
1.0  V5894_1    244  252  V5894_1    244  252
2.0  V5894_1    244  252  V5894_1    244  252
3.0  V3246_0     28   36  V3246_0     28   36
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 有没有简单的保存和加载的方法?

  • 如果没有,恢复我以前的结构的最佳方法是什么

小智 4

df.to_csv("test.csv", index=None)
df1 = pd.read_csv("test.csv", header=[0, 1] )
Run Code Online (Sandbox Code Playgroud)

回馈:

    A               B
    sp  start   end sp  start   end
0   V5894_1 243 251 V5894_1 243 251
Run Code Online (Sandbox Code Playgroud)