具有不同文件名的 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.csv
、China_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的主要内容,如果未能解决你的问题,请参考以下文章
带有 ggplots 的 for 循环生成具有相同值但标题不同的图形
如何在循环中的每次迭代中保存具有不同名称的文件? MATLAB