使用Pandas将多个CSV文件添加到单个CSV工作表中的选项卡中

6

我有多个csv文件,比如a.csv,b.csv。我想把a.csv和b.csv都放在一个新的c.csv中,两个新的csv文件应该按照它们原来的格式在选项卡中显示。我只想将两个csv添加到选项卡中。在pandas中是否有一种简便的方法实现这一点?我有下面的代码,但是没有输出结果,但是它确实在执行。尝试查看stackoverflow上的几篇文章,但由于某些原因我没有得到想要的输出。请帮我找到更好的解决方案。

folders=next(os.walk('.'))[1]
for host in folders:
    Path=os.path.join(os.getcwd(),host)                    
    all_files = glob.glob(os.path.join(Path, "*.csv"))     
    df_from_each_file = (pd.read_csv(f) for f in all_files)
    df   = pd.concat(df_from_each_file, ignore_index=True)
    df.to_csv('c.csv,' index=False)

“Both new csv should be in tabs inside as it is” 的意思是什么?是指两个不同的表格在同一个 CSV 文件中吗? - Prakash Palnati
就像是,我们想要将两个已有的CSV文件添加到一个新的带有选项卡的CSV文件中。 - steveJ
希望这个URL能对你有所帮助:https://dev59.com/j10b5IYBdhLWcg3wGN0s - Surya Tej
它很有用,但是我还没有从中找出答案。正在寻找Pandas的解决方案。 - steveJ
1
你是在寻找像Excel工作簿中的“标签页”吗?如果是的话,CSV文件是无法实现这个功能的。 - Superspork
能否实现 - 输出为同时包含CSV的Excel表格,如果可能的话,在代码开始时将输入的CSV转换为Excel? - steveJ
1个回答

7

CSV文件通常只有一个表格。但Excel xlsx 文件支持多个表格。使用 ExcelWriter,Pandas 可以直接将数据写入 Excel 文件。以下代码可满足您的需求:

import pandas as pd
import xlsxwriter
import glob
import os

writer = pd.ExcelWriter('multi_sheet.xlsx', engine='xlsxwriter')
folders = next(os.walk('.'))[1]

for host in folders:
    Path = os.path.join(os.getcwd(), host)

    for f in glob.glob(os.path.join(Path, "*.csv")):
        print(f)
        df = pd.read_csv(f)
        df.to_excel(writer, sheet_name=os.path.basename(f)[:31])

writer.save()

对于在您的文件夹中找到的每个CSV文件,都会创建一个新的Excel工作表。 工作表的名称是CSV文件的名称,例如a.csv将具有工作表名称a

注意:Excel对工作表名称有31个字符的限制。


它会在Excel中有两个选项卡来显示这两个CSV文件吗?我认为只会有一个。抱歉问这个问题,我现在不在电脑旁,过一段时间才能测试。 - steveJ
每个 CSV 文件将会得到一张表格。 - Martin Evans
有没有办法让工作表的名称超过31个字符? - steveJ
1
这似乎是Excel中的限制。如果您有更长的文件名,您至少需要使用[:31]。我已经更新了脚本。 - Martin Evans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接