将多个 CSV 文件合并到 Python 电子表格的单独选项卡中

新手上路,请多包涵

我有一个代码可以在一个目录中生成多个 CSV 文件。我想在 excel 中生成一个报告,其中包含作为单独选项卡的 CSV 文件。我使用了以下代码:

 import pandas as pd
import os
import csv
import glob
path = "/MyScripts"
all_files = glob.glob(os.path.join(path, "*.csv"))
df_from_each_file = (pd.read_csv(f) for f in all_files)
df_from_each_file.to_excel(writer, sheet_name='ReturnData.csv')
writer.save()

但它给出了以下错误: AttributeError: ‘generator’ object has no attribute ‘to_excel’ 不确定我哪里出错了。我是否需要导入任何特定的库来解决问题?

Python 版本为 2.7

原文由 Soubhik Banerjee 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 542
2 个回答

这里有两个问题:

  1. 您的生成器表达式允许您延迟迭代数据框对象。您不能将生成器表达式导出到 Excel 文件。
  2. 您的 sheet_name 参数是一个常量。要导出到多个工作表,您需要为每个工作表指定不同的名称。

为此,您可以使用一个简单的 for 循环:

 writer = pd.ExcelWriter('out.xlsx', engine='xlsxwriter')
df_from_each_file = (pd.read_csv(f) for f in all_files)

for idx, df in enumerate(df_from_each_file):
    df.to_excel(writer, sheet_name='data{0}.csv'.format(idx))

writer.save()

您的工作表将被命名为 data0.csvdata1.csv 等。如果您需要文件名作为工作表名称,您可以重组您的逻辑并使用 os 模块从路径中提取文件名:

 import os

writer = pd.ExcelWriter('out.xlsx', engine='xlsxwriter')

for f in all_files:
    df = pd.read_csv(f)
    df.to_excel(writer, sheet_name=os.path.basename(f))

writer.save()

原文由 jpp 发布,翻译遵循 CC BY-SA 4.0 许可协议

以下是 jpp 解决方案的完整源代码:

 import os
import pandas as pd
import glob

path = './'
all_files = glob.glob(os.path.join(path, "*.csv"))

writer = pd.ExcelWriter('out.xlsx', engine='xlsxwriter')

for f in all_files:
    df = pd.read_csv(f)
    df.to_excel(writer, sheet_name=os.path.splitext(os.path.basename(f))[0], index=False)

writer.save()

原文由 Dan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题