我一直在搜索如何将一行从一个 excel 追加/插入/连接到另一个 excel 但合并单元格。我找不到我要找的东西。
我尝试使用 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 个工作簿的预期输出:
关于python - 从一个 excel 添加带有合并单元格的标题并插入到另一个 excel Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50202869/