我一直在搜索如何从一个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')
大熊猫有没有办法做到这一点?我只需要将标题插入顶行。
虽然我仍然想找到一种方法,但如果这个问题有重复,只要我能找到答案或建议,对我来说实际上是好的。
答案 0 :(得分:3)
您可以使用pd.read_excel
在工作簿中读取您想要的数据,例如“test1.xlsx”。然后,您可以使用openpyxl.load_workbook()
打开包含标题的现有工作簿,在您的情况下是'merge1.xlsx'。最后,您可以使用新名称('test3.xlsx')保存新的workbbok,而无需更改现有的两个工作簿。
下面我提供了一个完全可重现的示例,说明如何执行此操作。为了使这个例子完全可重现,我创建了'merge1.xlsx'和'test1.xlsx'。
请注意,如果在你的'merge1.xlsx'中,如果你只有你想要的标题而文件中没有其他内容,你可以使用我在下面留下的两行代码。这只会将您的数据从'test1.xlsx'附加到'merge1.xlsx'中的标题。如果是这种情况,那么你可以在最后摆脱两个llops。否则在我的例子中它有点复杂。
在创建'test3.xlsx'时,我们遍历每一行,然后使用len(df3.columns)
确定有多少列。在我的示例中,这等于2,但此代码也适用于更多列。
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本工作簿的预期输出: