pandas 添加多个csv到excel文件中并保留这些csv文件的名称

c7rzv4ha  于 2023-01-15  发布在  其他
关注(0)|答案(3)|浏览(175)

我试图收集多个csv文件到一个excel工作簿,并保持csv文件的名称在每个工作表,但循环无法保存工作表的每一步,我只得到最后一张工作表?

for i in range(0,len(dir)):

for filee in os.listdir(dir):
 if filee.endswith(".csv"):
    file_path = os.path.join(dir, filee)
    df = pd.read_csv(file_path, on_bad_lines='skip')
    df.to_excel("output.xlsx",sheet_name=filee, index=False)
    i=i+1

我试过ExcelWriter,但文件出错,有人能帮助解决这个问题吗

kmbjn2e3

kmbjn2e31#

由于第一个for循环没有正确定义,所以这段代码会产生一个SyntaxError,但是,假设它是一个IndentationError,并移动到for循环体。
在每个.csv文件中,for循环将其读入pandas.DataFrame并将其写入output.xlsx,基本上,每次迭代都覆盖该文件,因此,您只能看到最后一张表。
请!看看这个链接:Add worksheet to existing Excel file with pandas

cygmwpex

cygmwpex2#

通常,问题是工作表名的类型,例如在df.to_excel("Output.xlsx",sheet_name = '1')中,如果我不在引号中加上1,我会得到一个错误,它必须总是str类型
例如,我在Google协作文件中有以下csv文件:

使用下面的代码,我首先将它们全部放在df中,然后将它们传输到Excel文件(在单独的工作表中)。

import pandas as pd

df = {}
for i in range(1,5): 
  df[i] = pd.read_csv('sample_data/file'+str(i)+'.csv')

with pd.ExcelWriter('output.xlsx') as writer:  
  for i in range(1,5):
    df[i].to_excel(writer, sheet_name = str(i))

它对我来说工作正常,我没有得到任何错误。

hc2pp10m

hc2pp10m3#

你可以使用dict comp来存储所有的dfs和文件名,然后把它传递给一个函数,用list comp来解压缩dict并写入工作表。

from pathlib import Path

import pandas as pd

path = "/path/to/csv/files"

def write_sheets(file_map: dict) -> None:
    with pd.ExcelWriter(f"{path}/output.xlsx", engine="xlsxwriter") as writer:
        [df.to_excel(writer, sheet_name=sheet_name, index=False) for sheet_name, df in file_map.items()]

file_mapping = {Path(file).stem: pd.read_csv(file) for file in Path(path).glob("*csv")}
write_sheets(file_mapping)

相关问题