python pandas 数据帧写入多行 header

python pandas dataframe write multi row header

数据1

A  B  C  D  E   <--- columns
a  b  c  d  e
a  b  c  d  e
a  b  c  d  e


result what i want

A  B  C  D  E <--- columns
A  B  C  D  E <--- columns
A  B  C  D  E <--- columns
a  b  c  d  e
a  b  c  d  e
a  b  c  d  e

我找了这个,最后没找到:)

如何获得好的结果?我请求你的帮助。谢谢


非常感谢

转换为 Excel 时,创建了一个新的空列。

test

a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   p   q   r   s   t   u   v   w   x   y
1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3
4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5


dir_path = os.path.dirname(os.path.realpath(__file__))
df = pd.read_excel(dir_path + '/import/sample.xlsx', header=0)
headers = [list(df.columns), list(df.columns), list(df.columns)]
df.columns = pd.MultiIndex.from_arrays(headers)
writer = pd.ExcelWriter(dir_path + '/export/sample.xlsx', options={'strings_to_urls': False}, )
df.to_excel(writer, sheet_name='result')
writer.save()

result

    a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   p   q   r   s   t   u   v   w   x   y
    a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   p   q   r   s   t   u   v   w   x   y
    a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   p   q   r   s   t   u   v   w   x   y
                                <<<<---- empty row  ---->>>>                                                    0   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
1   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
2   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3
3   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5

我试图摆脱它但失败了。

df = df[df['a'] != ""]

使用MultiIndex.from_arrays:

df.columns = pd.MultiIndex.from_arrays([df.columns] * 3)
print (df)
   A  B  C  D  E
   A  B  C  D  E
   A  B  C  D  E
0  a  b  c  d  e
1  a  b  c  d  e
2  a  b  c  d  e

如需定制MultiIndex:

L = [list('abcde'), list('fghij'), list('klmno')]
df.columns = pd.MultiIndex.from_arrays(L)
print (df)
   a  b  c  d  e
   f  g  h  i  j
   k  l  m  n  o
0  a  b  c  d  e
1  a  b  c  d  e
2  a  b  c  d  e

也可以使用接下来的 2 个函数来创建 MultiIndex:

编辑:

空行是 bug and solution is here:

writer = pd.ExcelWriter("file1.xlsx")
headers = pd.DataFrame(df.columns.tolist()).T
headers.to_excel(writer, header=False, index=False)
df.columns = pd.Index(range(len(df.columns)))  
df.to_excel( writer, header=False, index=False, startrow=len(headers))
writer.save()