大熊猫使用groupby拆分为多个csv,并将其保存到具有相同名称的文件夹中

时间:2018-06-27 13:07:17

标签: python pandas os.path

我对Python,Pandas和整体编程还是很陌生,如果这是一个愚蠢的问题,请对不起。

问题与this one非常相似(我已经在代码中使用了此问题),但我想更进一步,将所有分开的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)

并且它将分组的“联系人帐户名称”值保存在根文件夹中作为单独的csvs。但是我需要将其保存到名为“联系帐户名称”值的根文件夹中的文件夹。

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

数据框:

  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

谢谢!

3 个答案:

答案 0 :(得分:1)

您真正要做的就是将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

答案 1 :(得分:1)

使用os.path.exists检查文件夹是否存在,并使用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)

答案 2 :(得分:0)

您可以在循环外定义输出目录。如下所示,您可能希望检查它是否存在,如果不存在,则通过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字符串,可在Python 3.6+中使用,并且更具可读性/效率。