将 Dataframe 的每个切片保存到特定Excel工作表中

z4iuyo4d  于 2022-12-30  发布在  其他
关注(0)|答案(3)|浏览(232)

我有一个 Dataframe ,看起来像这样:

print(df)
    city    Year    ville   Asset_Type  Titre   psqm
0   Agadir  2010.0  Agadir  Appart  3225    6276.923077
1   Agadir  2010.0  Agadir  Maison_Dar  37  8571.428571
2   Agadir  2010.0  Agadir  Villa   107 6279.469027
3   Agadir  2011.0  Agadir  Appart  2931    6516.853933
4   Agadir  2011.0  Agadir  Maison_Dar  33  9000.000000
... ... ... ... ... ... ...
669 Tanger  2020.0  Tanger  Maison_Dar  134 13382.653061
670 Tanger  2021.0  BeniMakada  Appart  67  5555.555556
671 Tanger  2021.0  BeniMakada  Maison_Dar  4   14533.492823
672 Tanger  2021.0  Tanger  Appart  160 6148.338940
673 Tanger  2021.0  Tanger  Maison_Dar  12  13461.538462

将 Dataframe 保存到Excel工作表中非常简单

df.to_excel(path_to_output+'df.xlsx')

我想把每个城市的输出(city列)保存在同一个excel文件的不同工作表中。我该怎么做呢?我不确定我是否需要提前手动创建工作表,然后在每个工作表上循环,还是动态创建(通过python)?
谢谢你的帮忙

hmmo2u0o

hmmo2u0o1#

这是一种更像潘达斯的方式来做与@kaispace30098相同的事情,但是应该更快,因为我们不对每个组进行迭代。
先是代码,然后是解释

with pd.ExcelWriter('one_df.xlsx') as writer:
    df.groupby('city').apply(
        lambda group: group.to_excel(writer, sheet_name=group.name)
    )

1.我们使用with... as...语法创建一个writer,因为它会在我们完成时自动关闭文件,否则您将不得不稍后手动关闭。
1.由于您希望按城市对每个表进行分组,因此我们使用.groupby('city')进行分组
1.然后,我们将函数应用于具有.apply()的每个组,其中,我们将每个组转换为具有组的名称(即,城市的名称)的Excel写入。

b5lpy0ml

b5lpy0ml2#

通过使用 Dataframe 中的查询循环每个唯一城市,在每个循环中使用.to_excel函数

for i in range(len(df.city.unique())):
 df[df.city==df.city.unique()[i]].to_excel(path_to_output+f'df{i}.xlsx')

要将不同工作表存储到一个Excel中,请尝试:

writer = pd.ExcelWriter('one_excel.xlsx',engine='xlsxwriter')

for i in range(len(df.city.unique())):
 df[df.city==df.city.unique()[i]].to_excel(writer,sheet_name=f'df{i}',startrow=0 , startcol=0)
yws3nbqq

yws3nbqq3#

这段代码对我很有效,它把每个城市都输出到一个单独的excel表格中。

writer = pd.ExcelWriter(path_to_output+'Index_Output.xlsx', engine = 'xlsxwriter')
name=list(df.city.unique())
for i in range(len(df.city.unique())):    
    df[df.city==df.city.unique()[i]].to_excel(writer, sheet_name= name[i])

writer.save()
writer.close()

相关问题