Pandas 使用 groupby 分割成几个 csv 并保存到具有相同名称的文件夹中

Pandas split to several csv using groupby and saving it to the folders with the same name

我对 Python、Pandas 和整体编程还很陌生,如果这个问题太愚蠢,我很抱歉。

问题与 非常相似(我已将其用于我的代码)但我想更进一步,将所有分离的 csv 保存到具有相同名称的每个单独的文件夹中。

我现在有什么:

# this one is used to split carriers csv files 
for i, x in carriers.groupby('Contact Account Name'):
     x.to_csv(root + '/' "{}.csv".format(i.upper()), index=False)

+

 for i, x in carriers.groupby('Contact Account Name'):
        p = os.path.join(root, "{}.csv".format(i.upper()))
        x.to_csv(p, index=False)

它正在将分组的 'Contact Account Name' 值作为单独的 csvs 保存在根文件夹中。但我需要的是将它保存到根文件夹内的文件夹中,命名为 'Contact Account Name' values.

我尝试了几种不同的创建文件夹的方法,但都失败了。

数据框:

  Contact Account Name
0 Mike
1 Jeff 
2 Todd 
3 Bill

目前效果如何:

正在创建 csv:

root/MIKE.csv
root/JEFF.csv
root/TODD.csv
root/BILL.csv

我想要的样子:

root/MIKE/MIKE.csv
root/JEFF/JEFF.csv
root/TODD/TODD.csv
root/BILL/BILL.csv

提前致谢!

您真正需要做的就是将 Contact Account Name (i) 添加到 os.path.join 命令中 -

因此,以下内容应该大致可行 - ```

for i, x in carriers.groupby('Contact Account Name'):
    p = os.path.join(root, i, "{}.csv".format(i.upper()))
    x.to_csv(p, index=False)

```

在这里查看更多 - https://docs.python.org/2/library/os.path.html#os.path.join

您可以在循环外定义输出目录。您可能如下所示,希望检查它是否存在,如果不存在,则通过os.mkdir创建目录。

# define output directory
output_dir = os.path.join(root, 'Contact Account Name')

# create the directory if it doesn't exist
if not os.path.exists(output_dir):
    os.mkdir(output_dir)

for i, x in carriers.groupby('Contact Account Name'):
    # create output path from output directory
    p = os.path.join(output_dir, f'{i.upper()}.csv')
    x.to_csv(p, index=False)

请注意,在上面的示例中,我使用了 f-strings,可用于 Python 3.6+ 并且更具可读性/效率。

使用 os.path.exists and use os.mkdir 检查文件夹是否存在以创建新文件夹:

new_dir = os.path.join(root, "Contact Account Name")
if not os.path.exists(new_dir):
    os.mkdir(new_dir)

for i, x in carriers.groupby('Contact Account Name'):
    p = os.path.join(new_dir, "{}.csv".format(i.upper()))
    x.to_csv(p, index=False)