我有一个用例,其中我有7个专栏.但前4列在一个DF中,其余3列在第二个DF中.下面是我定义它们的示例代码

import pandas as pd

df1 = pd.DataFrame({
    'col1': [1, 2, 3],
    'col2': ['A', 'B', 'C'],
    'col3': [4.5, 6.7, 8.9],
    'col4': ['X', 'Y', 'Z']
})

df2 = pd.DataFrame({
    'col5': ['apple', 'banana', 'cherry'],
    'col6': [10, 20, 30],
    'col7': [True, False, True]
})
# Concatenate vertically
result_df = pd.concat([df1, df2], axis=0, ignore_index=True)

# Save to Excel
result_df.to_excel('output.xlsx', index=False)

因此,我想以下面的格式插入数据

enter image description here

但是,无论我做什么,我都不能得到这种格式.I实际yields 如下

enter image description here

在我看来,这更像是Pandas 的局限.我有什么办法来达到所要求的结果吗?请提出建议

推荐答案

你不应该使用concat(这将创建一个DataFrame),而是write the two DataFrames independently.

使用pandas.ExcelWriter处理文件:

# create new excel file
writer = pd.ExcelWriter('output.xlsx')

# write first DataFrame
df1.to_excel(writer, index=False)

# we start to write after the first table
# skipping 1 row (= len(df)+2)
df2.to_excel(writer, startrow=len(df1)+2, index=False)

# close file
writer.close()

enter image description here

generalization

如果您有许多数据帧,您可以概括为:

dfs = [df1, df2, df1, df2]
skip = 1

writer = pd.ExcelWriter('output.xlsx')
start = 0
for df in dfs:
    df.to_excel(writer, startrow=start, index=False)
    start += len(df)+skip+1

writer.close()

NB. this is assuming the columns only have 100 level.

输出:

enter image description here

对于MultiIndex,您还必须保存索引:

dfs = [df1, df2, pd.concat({'extra_level': df1}, axis=1), df1, df2]
skip = 1

writer = pd.ExcelWriter('output.xlsx')
start = 0
for df in dfs:
    df.to_excel(writer, startrow=start, index=True)
    start += len(df)+skip+df.columns.nlevels+(df.columns.nlevels>1)

输出:

enter image description here

Python-3.x相关问答推荐

Pandas :从元组字典创建数据帧

如何使用PySide6创建切换框架?

具有多个值的极轴旋转和熔化/取消旋转(反转旋转)操作(Pandas 堆叠/取消堆叠交替/UDF覆盖)

无法使用Python slack 螺栓SDK读取在 slack 通道中收到的消息

为什么 tkinter 在 tkinter 窗口外计算鼠标事件?

切片的Python复杂性与元组的星号相结合

Einsum 对于张量乘法很慢

XPATH:使用 .find_elements_by_xpath 为未知数量的 xpath 输入值

如何在数据['column']中的'string'等条件下应用pandas

排队多个子进程

没有可重定向到的 URL.提供一个 url 或在模型上定义一个 get_absolute_url 方法

无法在 macOS 上的 Anaconda3 python3.6 上安装 OpenCV3

为什么包含类的名称不被识别为返回值函数注释?

如何通过命令行将数组传递给python

pip install dryscrape 失败并显示错误:[Errno 2] 没有这样的文件或目录:'src/webkit_server'?

Python 3.5:async with导致 SyntaxError.为什么?

从大字典中弹出 N 项的最快方法

调用 Python doctest 时如何启用省略号?

如何修复:cx_Oracle.DatabaseError:DPI-1047:找不到 64 位 Oracle 客户端库 - Python

如何使用 Celery 和 Django 将任务路由到不同的队列