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)
我对 Python、Pandas 和整体编程还很陌生,如果这个问题太愚蠢,我很抱歉。
问题与
我现在有什么:
# 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)