Панды разделены на несколько CSV с помощью группового и сохранения его в папки с тем же именем - PullRequest
0 голосов
/ 27 июня 2018

Я очень плохо знаком с 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)

И сохраняет сгруппированные значения «Имя учетной записи контакта» в корневой папке как отдельные csvs. Но мне нужно сохранить его в папке внутри корневой папки, названной значениями «Имя учетной записи контакта».

Я пробовал несколько разных способов создания папок, но не смог.

Фрейм данных:

  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

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

Вы можете определить выходной каталог за пределами вашего цикла. Как вы можете ниже, вы можете проверить, существует ли он, создав каталог через 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-строки, доступные в Python 3.6+ и более удобочитаемые / эффективные.

0 голосов
/ 27 июня 2018

Проверьте существование папки с помощью os.path.exists и используйте 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)
0 голосов
/ 27 июня 2018

Все, что вам действительно нужно сделать, это добавить 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

...