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

Python DataFrame替换N/S为+/-报错求助(地图散点图需求)

搞定DataFrame经纬度转正负数值的问题

嘿,我来帮你解决这个问题!先看看你原代码里的几个小坑:

  • range(1) 只会处理第1行(索引0),没法覆盖所有数据;
  • Python里没有else if,正确写法是elif,而且你的缩进也不对,elif得和对应的if保持同级;
  • 直接用df.iloc[i]赋值容易因为列不匹配报错,得明确是处理纬度还是经度列。

下面给你两种解决方案,一种是适合新手理解的逐行循环写法,另一种是Pandas专属的高效批量处理方法(强烈推荐后者,毕竟Pandas就是用来帮我们摆脱手动循环的😉)。

方案1:新手友好的逐行循环

假设你的location DataFrame里,纬度的数值和方向是分开的列(比如第0列是数值,第2列是N/S),经度同理。你可以这样写:

import pandas as pd

# 替换成你自己的实际DataFrame哦
location = pd.DataFrame({
    'lat_value': ['35.12', '40.56', '28.98'],
    'lat_dir': ['N', 'S', 'N'],
    'lon_value': ['120.34', '110.78', '105.23'],
    'lon_dir': ['E', 'W', 'E']
})

# 创建用来存处理后经纬度的空DataFrame
df = pd.DataFrame(columns=['latitude', 'longitude'])

# 遍历每一行处理
for i in range(len(location)):
    # 处理纬度:N为正,S为负
    lat_num = float(location.iloc[i]['lat_value'])
    lat_dir = location.iloc[i]['lat_dir']
    if lat_dir == 'N':
        final_lat = lat_num
    elif lat_dir == 'S':
        final_lat = -lat_num
    
    # 处理经度:E为正,W为负
    lon_num = float(location.iloc[i]['lon_value'])
    lon_dir = location.iloc[i]['lon_dir']
    if lon_dir == 'E':
        final_lon = lon_num
    elif lon_dir == 'W':
        final_lon = -lon_num
    
    # 把结果存入新的DataFrame
    df.loc[i] = [final_lat, final_lon]

print(df)

方案2:高效的Pandas批量处理(推荐)

如果你的经纬度是像"35.12N"或者"120.34 W"这样的格式(数值和方向连在一起或用空格分隔),用apply方法可以一键批量转换,代码更简洁还更快:

import pandas as pd

# 示例数据,替换成你的真实数据
location = pd.DataFrame({
    'latitude_str': ['35.12N', '40.56S', '28.98 N'],
    'longitude_str': ['120.34E', '110.78W', '105.23 W']
})

# 定义转换纬度的函数
def process_latitude(lat_str):
    # 处理带空格的情况,先拆分再提取
    if ' ' in lat_str:
        num_part, dir_part = lat_str.split()
    else:
        num_part = lat_str[:-1]
        dir_part = lat_str[-1]
    num = float(num_part)
    return num if dir_part == 'N' else -num

# 定义转换经度的函数
def process_longitude(lon_str):
    if ' ' in lon_str:
        num_part, dir_part = lon_str.split()
    else:
        num_part = lon_str[:-1]
        dir_part = lon_str[-1]
    num = float(num_part)
    return num if dir_part == 'E' else -num

# 批量转换整列数据
df = pd.DataFrame()
df['latitude'] = location['latitude_str'].apply(process_latitude)
df['longitude'] = location['longitude_str'].apply(process_longitude)

print(df)

这样处理完之后,df里就是带正负号的经纬度数值啦,直接拿去画散点图完全没问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:21:57