【问题标题】:Splitting dataframe in smaller dataframe when value in column match and export them to excel fromat (pandas)当列中的值匹配时将数据帧拆分为较小的数据帧并将它们导出到excel fromat(熊猫)
【发布时间】:2021-10-11 08:40:29
【问题描述】:

我有一个数据框 A。我需要将其划分为具有匹配街道名称的较小数据框。

这是我拥有的数据框:

id Location_name Street_Number Street_name Object_needed
1 McDonald's 4 Rue de Hollande C400/P200
2 Hollande 175 Rue de Hollande Porte socle simple S20
3 Stade 197 Rue des potiers CCPI S20 6980138
4 King Jouet 33 Rue des potiers Coffret CCPI CIBE Mono
5 CARIBBEAN CLEANING 6 Galisbay Coffret CCPI CIBE Mono

我想要的结果:

数据框 1:

id Location_name Street_Number Street_name Object_needed
1 McDonald's 4 Rue de Hollande C400/P200
2 Hollande 175 Rue de Hollande Porte socle simple S20

数据框 2:

id Location_name Street_Number Street_name Object_needed
3 Stade 197 Rue des potiers CCPI S20 6980138
4 King Jouet 33 Rue des potiers Coffret CCPI CIBE Mono

数据帧 3:

id Location_name Street_Number Street_name Object_needed
5 CARIBBEAN CLEANING 6 Galisbay Coffret CCPI CIBE Mono

目标是创建与相应街道名称一样多的数据框。

我正在使用 groupby:

grouper = [g[1] for g in df.groupby(['Street_name'])]

有没有办法在他们正在分类的street_name 之后命名它们?在我的示例中,第一个名称不是grouper[0],而是Rue_de_Hollande

最后,你知道将所有数据帧一次导出为 excel 格式吗?

【问题讨论】:

  • 您想要不同工作表/选项卡中的一个 excel 文件中的数据框吗?还是您想要为每条街道分别设置文件?
  • @chatax 如果所有新数据框都可以在一个 excel 中使用,那将是完美的!
  • 查看我的解决方案

标签: python pandas dataframe google-colaboratory export-to-excel


【解决方案1】:

如果您希望您的街道在一个文件中的单独 Excel 工作表中,您可以使用 Pandas ExcelWriter:

streets = set(df.Street_name)
with pd.ExcelWriter('all_streets_excel.xlsx', mode='w') as writer:
    for street_name in streets:
        street_df = df[df.loc[:, 'Street_name'] == street_name]
        street_df.to_excel(writer, street_name)

【讨论】:

  • 抱歉,我认为我正在解决我的问题,但它只有一排街道。就像在我的“Rue de Hollande”示例中,它不会为每一行创建一个 exel,例如“Data frame 1”。它只有 id 1 行,但没有另一行 (id2)。
  • 可能有拼写错误?检查空格
  • 请使用mode='w'重试
  • 我正在用你以前版本的代码尝试它,你是写的,我没有正确清理我的街道名称列,所以仍然有一些空格。现在我正在尝试你的新版本我有一些新问题。第 2 行我有这个错误“[Errno 2] 没有这样的文件或目录:'all_streets_excel.xlsx'”所以我在 colob 目录中手动创建了这个文件。但后来我又遇到了一个新错误:“BadZipFile:文件不是 zip 文件”。我做错了什么?
  • 我没有看到您的其他回复,我与 mode=w 完美配合。感谢您的宝贵时间!
【解决方案2】:

这可以通过 pandas.query 和 pandas.to_excel 方法来实现,方法是创建唯一街道名称的列表并在 for 循环中进行迭代:

streets = df["Street_name"].unique()

for street in streets:
    df_streets = df.query('Street_name == @street')
    df_streets.to_excel(street + '.xlsx')

【讨论】:

  • 感谢您的回复您的方法也很有效,但我试图通过循环来实现它,因为我的数据框的行数比我的示例多。但是你的方法肯定会帮助我解决另一个问题;)
  • 我很高兴它有帮助!我已经编辑了我的帖子以包含一种通过循环实现相同目的的方法。
  • 我认为您会发现这完全符合您的要求;)如果它对您有用,如果您能给它一个赞成票并接受答案,我将不胜感激。我也从这里开始:)
  • 再次感谢您!是的,我会的
  • 我认为我的解决方案是更简单有效的解决方案,但我想不管对你有用...
猜你喜欢
  • 1970-01-01
  • 2019-07-29
  • 2020-10-06
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 2022-10-23
  • 2021-11-08
  • 2021-08-18
相关资源
最近更新 更多