【问题标题】:How to export a dataframe to excel with sheets based on values in a column如何使用基于列中的值的工作表将数据框导出到 Excel
【发布时间】:2019-07-14 06:16:39
【问题描述】:

我已经在 Python 中基于 marging 多个 excel 文件创建了一个数据框,现在我想将该组合数据导出到一个 .xlsx 文件,其中包含基于列中的值的多个工作表,并让这些工作表以该值命名在列中。

使用下图中的示例,我目前可以将所有数据导出到 .xlsx 文件中。

我想做的是按区域列过滤数据,并将区域列中与区域 1 标志关联的所有数据导出到名为“区域 1”的工作表,并将与区域 2 标志关联的所有数据导出到名为“Zone2”的工作表。理想情况下,在第二张图片中,突出显示的数据是当前“Zone1”工作表中显示的唯一数据,未突出显示的数据将显示在工作表“Zone2”中

我正在使用以下代码来拉入数据、合并和导出。

import pandas as pd
import numpy as np
import glob

glob.glob("/Users/xxx/Desktop/PythonTests/Test_Zone*.xlsx")

all_data = pd.DataFrame()
for f in     glob.glob("/Users/xxx/Desktop/PythonTests/Test_Zone*.xlsx"):
df = pd.read_excel(f)
all_data = all_data.append(df,ignore_index=True)
all_data.to_excel("/Users/xxx/Desktop/merged.xlsx",index=False)

【问题讨论】:

    标签: python export-to-excel


    【解决方案1】:

    假设您有一个数据框 df,其中包含您的所有数据(如果您已经将其保存为 excel 文件,则可以使用 df = pd.read_excel('path_to_file.xlsx')),您可以使用以下代码对您的数据框进行子集化通过Zone 并将每个结果子集数据帧保存到字典df_dict

    df_dict = {}
    
    for zone in df['Zone'].unique():
        zone_df = df[df['Zone'] == zone]
        df_dict[zone] = zone_df
    

    一旦你有了这本字典,你就可以使用pd.ExcelWriterto_excel 将你的数据框写入一个单独的excel文件表中:

    def save_xlsx(df_dict, path):
        """
        Save a dictionary of dataframes to an excel file, with each dataframe as a seperate page
        """
    
        with pd.ExcelWriter(path) as writer:
            for key in df_dict:
                df_dict[key].to_excel(writer, key, index=False)
    
        writer.save()
    

    调用函数会给你想要的结果:

    save_xlsx(df_dict, 'path_to_file.xlsx')
    

    如果您想去掉工作表名称中的空格(如您在示例中所做的那样),您可以相应地修改 save_xlsx 函数:

    df_dict[key].to_excel(writer, key.replace(' ',''), index=False)
    

    【讨论】:

    • 我尝试了您的代码以使用已合并的 excel 文件,并在我的代码之后合并文件。使用已经创建的包含所有组合数据的 Excel 文件效果很好,谢谢!!然后我尝试在我的原始代码之后使用代码来组合文件,不知何故,我只导出了一个带有名为“Zone 2”的工作表的 excel 文件(并且它是正确的数据),而不是“Zone1. "我将在答案部分添加我尝试过的代码
    • 这很有帮助。谢谢!
    【解决方案2】:

    这是我试过的代码,它只导出了 Zone2 而不是 1 和 2"

    import pandas as pd
    import numpy as np
    import glob
    
    #list
    glob.glob("/Users/TTT/Desktop/PythonTests/Test_Zone*.xlsx")
    
    ALLDATA = pd.DataFrame()
    for f in glob.glob("/Users/TTT/Desktop/PythonTests/Test_Zone*.xlsx"):
        df = pd.read_excel(f)
        ALLDATA = ALLDATA.append(df,ignore_index=True)
    
        df_dict = {}
    
    for zone in df['Zone'].unique():
        zone_df = df[df['Zone'] == zone]
        df_dict[zone] = zone_df
    
    save_xlsx(df_dict, '/Users/TTT/Desktop/PythonTests/ExportTest.xlsx')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 2018-08-30
      • 2016-08-25
      • 1970-01-01
      • 1970-01-01
      • 2019-09-09
      相关资源
      最近更新 更多