【问题标题】:Loop through multiple files in a directory and save into a single excel file in different sheets循环遍历目录中的多个文件并保存到不同工作表中的单个 excel 文件中
【发布时间】:2021-09-06 05:39:47
【问题描述】:

我将一组 csv 文件保存到一个文件夹中,我想循环访问它们,转换成 pandas 数据框,执行一系列操作,然后保存到单个 Excel 文件中,每个数据框都保存到它自己的工作表中。

这是我目前的代码。

from pathlib import Path
import pandas as pd

dir_b = r'/Desktop/MyProjects'
writer = pd.ExcelWriter('Compiled File.xlsx')

for csv in Path(dir_b).glob('*.csv'):
    df_list = []
    df = pd.read_csv(csv, encoding = 'ISO-8859-1', engine='python', delimiter = ',')
    car_column = df.pop('car')
    df.insert(9, 'car', car_column)
    df_list.append(df)
    for i, df in enumerate(df_list):
        df.to_excel(writer, sheet_name = 'Sheet' + str(i+1), index = False)
writer.save() 

除了保存到 Excel 文件外,一切似乎都正常。运行代码时没有错误,但最终的 Excel 文件仅显示 1 个数据框中的 1 个工作表。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    每次迭代都在清空数组。试试这个:

    from pathlib import Path
    import pandas as pd
    
    dir_b = r'/Desktop/MyProjects'
    writer = pd.ExcelWriter('Compiled File.xlsx')
    
    
    df_list = []
    for csv in Path(dir_b).glob('*.csv'):
        df = pd.read_csv(csv, encoding = 'ISO-8859-1', engine='python', delimiter = ',')
        car_column = df.pop('car')
        df.insert(9, 'car', car_column)
        df_list.append(df)
    
    for i, df in enumerate(df_list):
            df.to_excel(writer, sheet_name = 'Sheet' + str(i+1), index = False)
            writer.save() 
    

    【讨论】:

      【解决方案2】:

      df_list 定义应该在 for 循环之外。否则,每次迭代都会清空 -

      df_list = []
      for csv in Path(dir_b).glob('*.csv'):
          df = pd.read_csv(csv, encoding = 'ISO-8859-1', engine='python', delimiter = ',')
          car_column = df.pop('car')
          df.insert(9, 'car', car_column)
          df_list.append(df)
          for i, df in enumerate(df_list):
              df.to_excel(writer, sheet_name = 'Sheet' + str(i+1), index = False)
      writer.save() 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-04
        • 1970-01-01
        • 2017-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-20
        • 1970-01-01
        相关资源
        最近更新 更多