python - 从一个 excel 添加带有合并单元格的标题并插入到另一个 excel Pandas

标签 python excel pandas openpyxl

我一直在搜索如何将一行从一个 excel 追加/插入/连接到另一个 excel 但合并单元格。我找不到我要找的东西。

我需要得到的是: enter image description here

并追加到第一行: enter image description here

我尝试使用 pandas append() 但它破坏了列的排列。

df = pd.DataFrame()

for f in ['merge1.xlsx', 'test1.xlsx']:
    data = pd.read_excel(f, 'Sheet1')
    df = df.append(data)

df.to_excel('test3.xlsx')

Pandas 有办法做到吗?我只需要按字面意思将标题插入第一行。

虽然我仍在尝试寻找方法,但只要我能找到答案或建议,如果这个问题有重复对我来说其实没问题。

最佳答案

您可以使用 pd.read_excel 在工作簿中读取您想要的数据,在您的例子中是“test1.xlsx”。然后,您可以利用 openpyxl.load_workbook() 打开带有标题的现有工作簿,在您的例子中是“merge1.xlsx”。最后,您可以使用新名称(“test3.xlsx”)保存新的 workbbok,而无需更改两个现有的工作簿。

下面我提供了一个完全可重现的示例来说明如何执行此操作。为了使这个示例完全可重现,我创建了“merge1.xlsx”和“test1.xlsx”。

请注意,如果在您的“merge1.xlsx”中,如果您只有所需的标题而文件中没有其他内容,您可以使用我在下面注释掉的两行。这只会将您的数据从“test1.xlsx”附加到“merge1.xlsx”中的标题。如果是这种情况,那么您可以在最后摆脱这两个 for llops。否则,就像我的例子一样,它有点复杂。

在创建“test3.xlsx”时,我们遍历每一行并使用 len(df3.columns) 确定有多少列。在我的示例中,这等于二,但此代码也适用于更多的列。

import pandas as pd
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows

df1 = pd.DataFrame()
writer = pd.ExcelWriter('merge1.xlsx') #xlsxwriter engine
df1.to_excel(writer, sheet_name='Sheet1')
ws = writer.sheets['Sheet1']
ws.merge_range('A1:C1', 'This is a merged cell')
ws.write('A3', 'some string I might not want in other workbooks')
writer.save()

df2 = pd.DataFrame({'col_1': [1,2,3,4,5,6], 'col_2': ['A','B','C','D','E','F']})
writer = pd.ExcelWriter('test1.xlsx')
df2.to_excel(writer, sheet_name='Sheet1')
writer.save()

df3 = pd.read_excel('test1.xlsx')
wb = load_workbook('merge1.xlsx')
ws = wb['Sheet1']
#for row in dataframe_to_rows(df3):
#    ws.append(row)
column = 2
for item in list(df3.columns.values):
    ws.cell(2, column=column).value = str(item)
    column = column + 1
for row_index, row in df3.iterrows():
    ws.cell(row=row_index+3, column=1).value = row_index #comment out to remove index
    for i in range(0, len(df3.columns)):
        ws.cell(row=row_index+3, column=i+2).value = row[i]

wb.save("test3.xlsx")

3 个工作簿的预期输出:

Expected Output

关于python - 从一个 excel 添加带有合并单元格的标题并插入到另一个 excel Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50202869/

相关文章:

python - 使用 python selenium 在浏览器中创建警报窗口

python - FTP服务器不使用套接字将数据发送到Python中的代理

如果落在另一个 df 的日期范围之间,python 将值分配给 pandas df

excel - 如何创建在 EPPlus 中计算值的 DataField?

python - 分组并填充缺失的日期时间值

pandas - 对Pandas数据框进行排序并打印最高的n个值

python - Range 类的 AutoFilter 方法失败(Dispatch 与 EnsureDispatch)

excel - Excel中的三个IF语句

python - 将可迭代字典展开/扩展到数据框中

arrays - 从数组数据而不是范围创建图表