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

如何交换含NaN的DataFrame列表列元素(经纬度转纬度经度)

解决方法

问题出在你的处理逻辑没有区分列表元素和非列表元素,直接替换NaN成0会把整个[nan, nan]列表变成单个数值0,自然没法用下标访问。以下是两种可行的解决方案:

方案1:仅对有效列表交换元素,保留原缺失结构

如果不需要替换列表内的NaN,只是交换经纬度顺序,直接在apply里先判断元素是否为列表:

import pandas as pd
import numpy as np

# 初始化你的DataFrame
df = pd.DataFrame({'col':[[-74.61286283, 40.56889437], [np.nan, np.nan], [-105.18943020000002, 40.07872419], [-96.83537306, 32.82099448]]})

# 交换列表内元素位置,非列表元素保持原样
df['lat_lng'] = df['col'].apply(lambda x: [x[1], x[0]] if isinstance(x, list) else x)

方案2:替换列表内的NaN同时交换顺序

如果需要把列表里的NaN替换成指定值(比如0),同时保留列表结构,可这样处理:

df['lat_lng'] = df['col'].apply(
    lambda x: [y if not pd.isna(y) else 0 for y in reversed(x)]
    if isinstance(x, list) else x
)

关键说明

  • 你之前用fillna(0)的错误在于:它会把整个[nan, nan]列表替换成单个数值0,破坏了原有的列表结构,导致后续无法用下标访问元素。
  • 核心逻辑是先判断元素类型,只对列表执行交换/替换操作,非列表元素直接跳过,避免下标访问错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:27:19