You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将pandas DataFrame的坐标列表列拆分为相邻点对多行数据

最优实现方案

你可以用pandas内置的apply+explode组合实现需求,代码简洁且性能远高于手动循环,还能自动保留原有行的其他属性:

步骤1:预处理坐标列(必填)

从CSV读取的嵌套列表默认是字符串格式,需要先转为Python列表对象:

import pandas as pd
import ast

# 假设已通过read_csv读取数据到bike_path_df
bike_path_df['coordinates'] = bike_path_df['coordinates'].apply(ast.literal_eval)

步骤2:生成相邻点对

用zip配对当前点和下一个点,比手动判断索引的写法更简洁高效:

def get_pairs(point_list):
    # p1为当前点,p2为下一个点,拼接为[起点经度, 起点纬度, 终点经度, 终点纬度]格式
    return [ [*p1, *p2] for p1, p2 in zip(point_list[:-1], point_list[1:]) ]

bike_path_df['coordinate_pair'] = bike_path_df['coordinates'].apply(get_pairs)

步骤3:拆分为单行点对

用explode方法把每行的点对列表拆分为独立行,原有行的其他属性会自动重复填充:

# ignore_index=True会重置行号,避免重复索引
result_df = bike_path_df.explode('coordinate_pair', ignore_index=True)

# 不需要原coordinates列可手动删除
result_df = result_df.drop('coordinates', axis=1)

可选扩展:拆分坐标为独立列

如果需要把四个坐标值拆分为单独的列,可追加以下代码:

result_df[['start_lng', 'start_lat', 'end_lng', 'end_lat']] = pd.DataFrame(
    result_df['coordinate_pair'].tolist(),
    index=result_df.index
)

原问题说明:之前的方法出现维度不匹配是因为手动生成的all_list长度和原DataFrame行数一致,每个元素是当前路径的所有点对集合,而你需要的输出总长度是所有路径点对的数量之和,explode就是专门处理这类列表列拆分为多行的场景。

内容的提问来源于stack exchange,提问作者Ecaloota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:27:00