Pandas,使用merge\u cells=Fals从excel还原多索引

2024-04-19 14:03:49 发布

您现在位置:Python中文网/ 问答频道 /正文

当我将多索引和多列数据框保存到excel时。我有两个选择。有或没有merge_cells=False。这个问题很好地解释了:

Avoid merged cells in pandas to_excel method

如果我使用merge_cells=False,我将不得不使用ffil用前一个单元格填充合并单元格,这可能有点危险,因为如果确实存在nan(不是从合并单元格中出现),它们可能会(错误地)被覆盖。你知道吗

我可以使用df.to_excel(writer, merge_cells=False)生成一个整洁的格式

像这样的多索引数据帧(https://pastebin.com/Me0QhwUy):

      AA1 AA2 CB1 BB2 CC1      
        a   a   b   b   c     d
    ng/mL N/A N/A  mL N/A EU/mL
0 1                            
A 1     1   1   1   1   1     1
  2     1   1   1   1   1     1
B 1     1   1   1   1   1     1
  2     1   1   1   1   1     1
C 1     1   1   1   1   1     1
  2     1   1   1   1   1     1

将变成(在读取保存的excel之后):

writer = pd.ExcelWriter('test.xlsx')
df.to_excel(writer, merge_cells=False)
writer.save()
writer.close()

df2 = pd.read_excel('test.xlsx')

   0  1  AA1.a.ng/mL  AA2.a.N/A  CB1.b.N/A  BB2.b.mL  CC1.c.N/A  CC1.d.EU/mL
0  A  1            1          1          1         1          1            1
1  A  2            1          1          1         1          1            1
2  B  1            1          1          1         1          1            1
3  B  2            1          1          1         1          1            1
4  C  1            1          1          1         1          1            1
5  C  2            1          1          1         1          1            1            

我知道函数wide to long,但是这个函数采用了这里没有的公共存根名。你知道吗

如何从保存的excel还原原始的多索引数据帧(使用merged_cell=False)?你知道吗


Tags: to数据falsedfmergemergedexcelml
1条回答
网友
1楼 · 发布于 2024-04-19 14:03:49

read_excel中的MultiIndex使用参数index_col,然后对MultiIndex使用^{}

d = {('AA1', 'a', 'ng/mL'): {('A', 1): 1,
  ('A', 2): 1,
  ('B', 1): 1,
  ('B', 2): 1,
  ('C', 1): 1,
  ('C', 2): 1},
 ('AA2', 'a', 'N/A'): {('A', 1): 1,
  ('A', 2): 1,
  ('B', 1): 1,
  ('B', 2): 1,
  ('C', 1): 1,
  ('C', 2): 1},
 ('BB2', 'b', 'mL'): {('A', 1): 1,
  ('A', 2): 1,
  ('B', 1): 1,
  ('B', 2): 1,
  ('C', 1): 1,
  ('C', 2): 1},
 ('CB1', 'b', 'N/A'): {('A', 1): 1,
  ('A', 2): 1,
  ('B', 1): 1,
  ('B', 2): 1,
  ('C', 1): 1,
  ('C', 2): 1},
 ('CC1', 'c', 'N/A'): {('A', 1): 1,
  ('A', 2): 1,
  ('B', 1): 1,
  ('B', 2): 1,
  ('C', 1): 1,
  ('C', 2): 1},
 ('CC1', 'd', 'EU/mL'): {('A', 1): 1,
  ('A', 2): 1,
  ('B', 1): 1,
  ('B', 2): 1,
  ('C', 1): 1,
  ('C', 2): 1}}

df = pd.DataFrame(d)
print (df)

      AA1 AA2 BB2 CB1 CC1      
        a   a   b   b   c     d
    ng/mL N/A  mL N/A N/A EU/mL
A 1     1   1   1   1   1     1
  2     1   1   1   1   1     1
B 1     1   1   1   1   1     1
  2     1   1   1   1   1     1
C 1     1   1   1   1   1     1

writer = pd.ExcelWriter('test.xlsx')
df.to_excel(writer, merge_cells=False)
writer.save()
writer.close()

df2 = pd.read_excel('test.xlsx', index_col=[0,1])
df2.columns = df2.columns.str.split('.', expand=True)
print (df2)
      AA1 AA2 BB2 CB1 CC1      
        a   a   b   b   c     d
    ng/mL N/A  mL N/A N/A EU/mL
A 1     1   1   1   1   1     1
  2     1   1   1   1   1     1
B 1     1   1   1   1   1     1
  2     1   1   1   1   1     1
C 1     1   1   1   1   1     1
  2     1   1   1   1   1     1

相关问题 更多 >