有没有办法根据数据框列中的不同名称编写和保存多个 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)
我有一个包含大约 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)