如何将Python输出的steps和waycategory值生成匹配的Excel表格
问题根因与解决方案
核心问题所在
你现在的实现思路核心问题是两类数据的拆分维度完全不同,天然行数不可能一致:
steps列表是按导航指引动作拆分,每一行对应一次驾驶/步行指引(比如左转、直行、到达终点),一个指引段可能连续经过多种不同类别的道路waycategory的values列表是按道路属性拆分,只要道路类别发生变化就会新增一行,同一个导航指引段可能对应多条waycategory记录
直接分别导出两个表格自然无法对齐。
正确对齐方案
关联的核心依据是way_points索引范围:每个step的way_points字段存储的是当前指引段对应的路径点起始、结束索引(格式为[起始索引, 结束索引]),只要waycategory记录的索引范围和step的索引范围有重叠,就属于对应的关联关系。
提供两种常用的对齐方案:
方案1:保留全明细,展开为多行
最终行数和waycategory的values行数一致,每条waycategory记录都附带对应的step信息,适合需要全量明细的场景。
实现代码:
import pandas as pd from openpyxl import load_workbook # 提取原始数据 steps = data['features'][0]['properties']['segments'][0]['steps'] way_cates = data['features'][0]['properties']['extras']['waycategory']['values'] # 转为DataFrame并拆分索引字段 df_steps = pd.DataFrame(steps, columns=['distance', 'duration', 'type', 'instruction', 'name', 'way_points', 'exit_number']) df_steps[['step_start_idx', 'step_end_idx']] = pd.DataFrame(df_steps['way_points'].to_list(), index=df_steps.index) df_cates = pd.DataFrame(way_cates, columns=['cate_start_idx', 'cate_end_idx', 'way_category']) # 关联匹配重叠区间 df_merged = df_steps.assign(tmp_key=1).merge(df_cates.assign(tmp_key=1), on='tmp_key').drop('tmp_key', axis=1) df_merged = df_merged[ (df_merged['cate_start_idx'] < df_merged['step_end_idx']) & (df_merged['cate_end_idx'] > df_merged['step_start_idx']) ] # 导出到统一Excel output_path = r'c:\data\对齐后路径数据.xlsx' book = load_workbook(output_path) writer = pd.ExcelWriter(output_path, engine='openpyxl') writer.book = book df_merged.to_excel(writer, sheet_name='全量匹配数据', index=False) writer.save() writer.close()
方案2:单step对应单行,合并类别字段
最终行数和steps行数一致,每个导航指引只占一行,多个类别合并为单个字段,适合需要step为统计单元的场景。
核心合并代码(承接上面的df_merged):
# 合并同一个step对应的所有道路类别为顿号分隔的字符串 df_step_align = df_merged.groupby( ['distance', 'duration', 'type', 'instruction', 'name', 'way_points', 'exit_number'] )['way_category'].apply(lambda x: '、'.join(x.astype(str))).reset_index() # 直接导出df_step_align即可 output_path = r'c:\data\对齐后路径数据.xlsx' book = load_workbook(output_path) writer = pd.ExcelWriter(output_path, engine='openpyxl') writer.book = book df_step_align.to_excel(writer, sheet_name='按指引对齐数据', index=False) writer.save() writer.close()
内容的提问来源于stack exchange,提问作者beginnertryingtolearn
相关产品推荐
相关产品推荐

