Есть ли способ записать и сохранить несколько файлов CSV или Excel на основе разных имен в столбце данных? - PullRequest
0 голосов
/ 03 июля 2019

У меня есть большой DataFrame около 2000 имен, которые имеют другую информацию и диаграммы, которые идут с их соответствующим именем. Я хотел бы создать отдельный файл (предпочтительно файл Excel, но csv работает) для каждого имени в DataFrame.

df = pd.DataFrame({'name': ['Ben','Steve','Mary','Ben','Steve','Mary'], 'value': [1,2,3,4,5,6]})

Этот вопрос похож на то, что я собираюсь сделать, за исключением того, что он не говорит вам, как вызвать функцию таким образом, чтобы сохранить csvs для каждого имени. Запись нескольких CSV из функции .

Я пытался использовать эту функцию и создать для нее выход. Я тоже попробовал что-то вроде этого:

import os
g = df.groupby('name')

for n,g in df.groupby('name'):
 f_name = os.path.join('Desktop', str(n), 'Report.csv')
 g.to_csv(f_name)


def write_custom_csv(name):
   filtered = df[df['name'] == name]
   filtered.to_csv("Desktop\Report" + name + '.csv')
write_custom_csv(df)

Я также пытался определить выход:

outpath = "Desktop/Report"
def write_custom_csv(name):
    filtered = df[df['name'] == name]
    filtered.to_csv(outpath + name + '.csv')
write_custom_csv(df)

Ожидаемый вывод будет отдельным CSV-файлом для каждого из Бена, Стива, Мэри. У Бена будет 1 и 4, Стив 2 и 5 и Мэри 3 и 6, содержащиеся в файлах. Имя файла будет иметь свое имя, например, BenReport.csv.

Вывод не файл Excel и это сообщение об ошибке.

TypeError: Не удалось сравнить ['Desktop / Report'] со значениями блока

1 Ответ

1 голос
/ 03 июля 2019

Первый способ, которым вы пытались, должен работать. Какую ошибку вы получаете за это?

Второй способ близок, однако вы передаете весь DataFrame, когда пытаетесь передать только имена. Попробуйте вместо:

def write_custom_csv(df):
  for name in df['name'].unique():
    filtered = df[df['name'] == name]
    filtered.to_csv(os.path.join('Desktop', 'Report {}.csv'.format(name))

write_custom_csv(df)
...