Фрейм данных в CSV в цикле for с разными именами файлов

#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"