有没有办法根据数据框列中的不同名称编写和保存多个 csv 或 excel 文件?

Is there a way to write & save several csv or excel files based on different names in a column of a dataframe?

我有一个包含大约 2000 个名称的大型 DataFrame,其中包含与其各自名称相关的其他信息和图表。我想为 DataFrame 中的每个名称创建一个单独的文件(最好是 excel 文件,但可以使用 csv)。

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

这个问题与我想要做的类似,只是它没有告诉您如何以保存每个名称的 csvs 的方式调用该函数。 .

我试过使用那个函数并为它创建一个出路。我也尝试过这样的事情:

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)

对于 Ben、Steve 和 Mary,预期的输出将是一个单独的 csv 文件。 Ben 将在文件中包含 1 和 4,Steve 2 和 5,以及 Mary 3 和 6。文件的名称将包含它们的名称,例如 BenReport.csv.

输出没有excel文件和这个错误信息。

TypeError:无法将 ['Desktop/Report'] 与块值

进行比较

您尝试的第一种方法应该可行。你得到的错误是什么?

第二种方法很接近,但是当您试图仅传递名称时,您传递的是整个 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)