具有不同文件名的 for 循环中的 DataFrame 到 CSV

Posted

技术标签:

【中文标题】具有不同文件名的 for 循环中的 DataFrame 到 CSV【英文标题】:DataFrame to CSV in a for loop with different file names 【发布时间】:2021-02-05 07:33:08 【问题描述】:

我正在 for 循环中创建 pandas 数据帧,我想在 for 循环的每次迭代中将它们保存在具有不同名称的 csv 文件中。

我知道如何保存一个DataFrame:

path = r"C:\Users\SessionName\FolderName\FileName.csv"
df.to_csv(path)

现在当我有一个字符串列表时,例如

countries = ['United States', 'China', 'Russia', 'India']

我希望将这四个文件命名为United States_ranking.csvChina_ranking.csv 等。

我试过了:

for country in countries:
    path = r"C:\Users\SessionName\FolderName\" + country + "_ranking.csv"

但是这行不通。

【问题讨论】:

您希望 csv 完全相同吗?有没有可以先分组的国家列? 你的 for 循环中有“df.to_cvs(path)”行吗? ...和“for”中的小写“f”。 @Carl 是的,我愿意!更正了“F” 【参考方案1】:

就个人而言,我会使用pathlib 来处理您的路径。还要注意代码中的拼写错误。

例如,

import pandas as pd
from pathlib import Path

src_path  = r"C:\Users\SessionName\FolderName\FileName.csv"
countries = ['United States', 'China', 'Russia', 'India']

for country in countries:
    p = Path(src_path).parent.joinpath(f"country_ranking.csv")
    df.to_csv(p,index=False)

这会写:

C:\Users\SessionName\FolderName\United States_ranking.csv
C:\Users\SessionName\FolderName\China_ranking.csv
C:\Users\SessionName\FolderName\Russia_ranking.csv
C:\Users\SessionName\FolderName\India_ranking.csv

在这里使用 pathlib 对象的好处是您可以事先检查目录是否有效或文件是否存在。

print(p)
WindowsPath('C:/Users/SessionName/FolderName/United States_ranking.csv')
if not p.is_file():
   df.to_csv(p,index=False)
else:
    print('file exists')

【讨论】:

@jezrael 我也这么认为,但是OP没有展示CSV的结构所以不想假设【参考方案2】:

使用这个:

for country in countries:
    path = r"C:\\Users\\SessionName\\FolderName\\  _ranking.csv".format(country)

【讨论】:

【参考方案3】:

路径一定要这样写,否则会导致"\"出问题

for country in countries:
    path = r"C:\\Users\\SessionName\\FolderName\\" + country + "_ranking.csv"

【讨论】:

他/她使用的是原始字符串,所以不是这样。 不,原始字符串不适用于以“\”结尾的字符串。 啊哈!我知道了。我没有意识到这一点。谢谢!【参考方案4】:

我更喜欢 os.path.join(folder, country+filename)

for country in countries:
    path = os.path.join("C:\\Users\\SessionName\\FolderName\\", country + "_ranking.csv")
    df.loc[df.country == country].to_csv(path)

【讨论】:

【参考方案5】:

看起来 rawstring 不适用于 "\" 和字符串的结尾。

您可以通过在文件夹路径后添加额外的 \ 来修复它,方法是将双精度 "\\" 放入另一个字符串中。

countries = ['United States', 'China', 'Russia', 'India']
for country in countries:
    path = r"C:\Users\SessionName\FolderName" + "\\" + country + "_ranking.csv"

【讨论】:

以上是关于具有不同文件名的 for 循环中的 DataFrame 到 CSV的主要内容,如果未能解决你的问题,请参考以下文章

Python:动态嵌套for循环,每个循环具有不同的范围

带有 ggplots 的 for 循环生成具有相同值但标题不同的图形

如何在循环中的每次迭代中保存具有不同名称的文件? MATLAB

使用 for_each 创建不同数量的具有唯一 NIC 的 VM

在循环中附加具有不同维度的numpy ndarray

如何在 for 循环中创建具有整数值的 Checkbuttons?