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

如何在Python中将经纬度合并至同一列并添加坐标类型区分列

解决经纬度列转长格式的Python方案

你的思路完全可行,但用pandas的melt函数会更高效,尤其适合你这种需要保留多列、仅转换特定列的场景,下面给你两种实现方式:

方法一:用pandas.melt(推荐)

这是处理宽表转长表的标准方法,一行核心代码就能搞定,还能自动保留所有其他列:

代码示例

import pandas as pd

# 模拟你的实际数据(包含额外列)
df = pd.DataFrame({
    "Location": ["Place1", "Place2"],
    "Latitude": [32.123, 31.321],
    "Longitude": [120.123, 121.321],
    "City": ["Shanghai", "Nanjing"],
    "Population": [24870895, 9314685]
})

# 执行转换:id_vars指定需要保留的所有非经纬度列
result = pd.melt(
    df,
    id_vars=["Location", "City", "Population"],  # 替换成你实际要保留的十余列
    var_name="Lat/Long",
    value_name="Coords"
)

# 可选:按Location排序,让结果更整洁
result = result.sort_values("Location").reset_index(drop=True)

print(result)

参数说明

  • id_vars: 填写所有不需要拆分的列名(比如你的十余列),这些列会原样保留,每一行经纬度数据都会对应这些列的值
  • var_name: 对应你要的"Lat/Long"列,用来标记是纬度还是经度
  • value_name: 对应你要的"Coords"列,存放经纬度的数值

方法二:按你的思路手动拆分合并

如果想按你最初的想法落地,步骤如下:

代码示例

import pandas as pd

# 同样用上面的模拟数据
df = pd.DataFrame({
    "Location": ["Place1", "Place2"],
    "Latitude": [32.123, 31.321],
    "Longitude": [120.123, 121.321],
    "City": ["Shanghai", "Nanjing"],
    "Population": [24870895, 9314685]
})

# 拆分纬度DataFrame
df_lat = df.copy()
df_lat["Lat/Long"] = "Latitude"
df_lat["Coords"] = df_lat["Latitude"]
# 只保留需要的列
df_lat = df_lat[["Location", "City", "Population", "Lat/Long", "Coords"]]

# 拆分经度DataFrame
df_lon = df.copy()
df_lon["Lat/Long"] = "Longitude"
df_lon["Coords"] = df_lon["Longitude"]
df_lon = df_lon[["Location", "City", "Population", "Lat/Long", "Coords"]]

# 合并两个DataFrame
result = pd.concat([df_lat, df_lon]).sort_values("Location").reset_index(drop=True)

print(result)

两种方法最终输出的结果完全一致,第一种方法更简洁,适合处理大量列的场景;第二种方法逻辑直观,适合新手理解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:39:27