#python #pandas #csv #for-loop
#python #pandas #csv #цикл for
Вопрос:
Я создаю фреймы данных pandas в цикле for, и я хотел бы сохранять их в csv-файлах с разными именами на каждой итерации цикла for.
Я знаю, как сохранить один фрейм данных:
path = r"C:UsersSessionNameFolderNameFileName.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:UsersSessionNameFolderName" country "_ranking.csv"
Но это не сработает.
Комментарии:
1. вы хотите, чтобы csv были точно такими же? есть ли столбец страны, который вы можете сгруппировать в первую очередь?
2. Есть ли у вас строка «df.to_cvs (path)» внутри вашего цикла for?
3. … и строчная буква «f» в «for».
4. @Carl да, я делаю! Исправлено ‘F’
Ответ №1:
используйте это:
for country in countries:
path = r"C:\Users\SessionName\FolderName\ {} _ranking.csv".format(country)
Ответ №2:
лично я бы использовал pathlib
для обработки ваших путей. также будьте осторожны с опечатками в вашем коде.
например,
import pandas as pd
from pathlib import Path
src_path = r"C:UsersSessionNameFolderNameFileName.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:UsersSessionNameFolderNameUnited States_ranking.csv
C:UsersSessionNameFolderNameChina_ranking.csv
C:UsersSessionNameFolderNameRussia_ranking.csv
C:UsersSessionNameFolderNameIndia_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')
Комментарии:
1. @jezrael Я тоже так думаю, но OP не показал структуру CSV, поэтому не хочу предполагать
Ответ №3:
Вы должны написать путь следующим образом, иначе это вызовет проблему с ""
for country in countries:
path = r"C:\Users\SessionName\FolderName\" country "_ranking.csv"
Комментарии:
1. Он / она использует необработанную строку, так что это не так.
2. Нет, необработанная строка не работает для строк, которые заканчиваются одним ».
3. Ага! Я понимаю. Я не знал об этом. Спасибо!
Ответ №4:
Я предпочитаю os.path.join(папка, страна имя файла)
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 не работает с ""
и концом строки.
Вы можете исправить это, добавив дополнительный после вашего пути к папке, вставив double "\"
в другую строку.
countries = ['United States', 'China', 'Russia', 'India']
for country in countries:
path = r"C:UsersSessionNameFolderName" "\" country "_ranking.csv"