代码之家  ›  专栏  ›  技术社区  ›  sgerbhctim

如何打开Excel文件,将数据从数据框列写入列,另存为新文件

  •  0
  • sgerbhctim  · 技术社区  · 5 年前

    我有一个Excel文件,其中包含标题为“原始翻译”的列。我还有一个数据框架,列“原始翻译-语言”,基于我使用的语言和一些操作。

    我的目标是打开Excel文件,用数据框列“原始翻译-语言”中的所有数据覆盖标题为“原始翻译”的列,保留原始Excel文件格式,并保存到新的输出文件夹。

    这是我目前拥有的代码:

    def output_formatted_capstan_file(df, original_file, country, language):
        # this is where you generate the file:
        # https://stackoverflow.com/questions/20219254/how-to-write-to-an-existing-excel-file-without-overwriting-data-using-pandas
        try:
            print(original_file)
            book = load_workbook(original_file)
            writer = pd.ExcelWriter(original_file, engine='openpyxl')
            writer.book = book
            df.to_excel(writer, ['Original Translation - {}'.format(language)])
            writer.save()
        except:
            print('Failed')
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   HadynB    5 年前

    我将使用以下方法来处理这个问题。

    1)使用如下函数导入Excel文件: pandas.read_excel 从而将Excel中的数据转换为数据帧。我会打电话给你 exceldf

    2)将此数据框与熊猫数据框中已有的数据合并。我将调用您现有的翻译数据帧 translateddf

    3)重新排序新合并的数据帧 newdf 然后导出数据。有关如何重新排序的更多选项如下所示: re-ordering data frame

    4)将数据导出到Excel。我将让您把它集成到初始代码中。对于这个问题的一般答案,其他人可能希望在这里研究综合熊猫选项。 to_excel

    示例代码

    import pandas
    
    # Read in the Excel file
    exceldf = pandas.read_excel(open('your_xls_xlsx_filename'), sheetname='Sheet 1')
    
    # Create a new dataframe with your merged data, merging on 'key1'.
    # We then drop the column of the original translation, as it should no longer be needed
    # I've included the rename argument in case you need it.
    newdf = exceldf.merge(translateddf, left_on=['key1'], \
                    right_on=['key1']) \
    .rename(columns={'Original Translation {language}': 'Original Translation {language}'}) \
    .drop(['Original Translation'], axis=1)
    
    # Re-order your data. 
    # Note that if you renamed anything above, you have to update it here too
    newdf = newdf[['0', '1', '2', 'Original Translation {language}']]
    
    # An example export, that uses the generic implementation, not your specific code
    pandas.newdf.to_excel("output.xlsx")