【问题标题】:How to append a list to an existing excel workbook (same sheet) in python如何在python中将列表附加到现有的excel工作簿(同一张表)
【发布时间】:2020-09-03 12:38:39
【问题描述】:

我正在尝试使用两种不同的方法将列表附加到现有工作表(将列表附加为一行)。第一个运行良好,但工作表没有变化。第二个附加列表,但通过创建一个新表(这不是我的目标)。现有工作表的问题是前面有来自 A5 列的数据,我想附加填充空白单元格(A1 到 A4)的列表。换句话说,我不想删除现有数据或通过包含一个新行来移动它。我尝试了以下方法:

    #the existing sheet looks like that:
    A1 A2 A3 A4 A5 A6......
                5  6 ......
                2  7 ......
                .  . ......
                .  . ......
    import pandas as pd
    import numpy as np
    import openpyxl

    #solution 1
    lista=[1,2,3,4]
    wb= openpyxl.load_workbook('teste.xlsx')
    sheetname = wb['Hoja1']
    sheetname.cell(row=3,column=1).value=str(lista)

    #solution 2  
    with pd.ExcelWriter('teste.xlsx', mode='a') as writer:
            pd.DataFrame(lista).to_excel(writer,  header=False, index=False, startrow=3, startcol=1, 
            sheet_name="Hoja1")

你能帮帮我吗?

【问题讨论】:

    标签: python excel list append


    【解决方案1】:

    您可以使用pandas.to_excelpandas.read_excelhttps://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_excel.htmlhttps://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html),这些数据可以像列一​​样添加到数据框中,而不是行:

    # first read your data set
    df = pd.read_excel('teste.xlsx', sheet_name='Hoja1')
    # then add your columns
    df['A1'] = 1 # you write only one value but I guess you have more
    ...
    # and save
    df.to_excel("teste.xlsx", sheet_name='Hoja1')
    

    编辑 (18.5.):

    如果您坚持追加行(我不知道您的数据是如何生成的,并且您是否可以通过索引直接提供数据帧),我建议您拆分原始数据(或者仅加载第二部分),创建逐行从您的数据中获取新的dataFrame,然后concat它们,即:

    # take the second part after A5 column which you do not want to change
    df2 = df.loc[:,'A5':]
    
    # take the first part and use only column names
    df1 = df.loc[:,:'A4'].dropna()
    # append your data, here 2 rows
    df1 = df1.append(pd.DataFrame([[5, 6, 3, 2], [7, 8, 1, 5]], columns=df1.columns))
    
    # concat
    df3 = pd.concat([df1, df2], axis=1)
    # and save
    df3.to_excel("teste.xlsx", sheet_name='Hoja1')
    

    【讨论】:

    • 感谢您的想法。问题是我需要将内容附加为一行,即从 A1 到 A4。由于我生成了许多列表,因此我还需要在以下行中继续追加。所有这些都不会删除现有内容。
    猜你喜欢
    • 2017-09-09
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 2011-12-01
    • 2021-11-18
    • 1970-01-01
    相关资源
    最近更新 更多