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

Pandas:将字符串列表中的nan转为None后literal_eval再转回np.nan

解决literal_eval无法识别字符串中nan的问题

下面是两种实用的处理方法,核心思路就是先把字符串里的nan替换成literal_eval能识别的None,解析后再转回np.nan:

方法一:简单字符串替换+列表推导

适合确定字符串里的nan都是单独出现的场景,步骤直接清晰:

import ast
import numpy as np
import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({'float_list': ['[1.21, 1.21, nan, nan, 100]', '[3.4, nan, 5.6, 7.8]']})

def parse_str_list(s):
    # 把字符串里的nan替换成None
    processed_str = s.replace('nan', 'None')
    # 用literal_eval解析成列表
    raw_list = ast.literal_eval(processed_str)
    # 把列表里的None转成np.nan
    return [np.nan if item is None else item for item in raw_list]

# 应用到目标列
df['parsed_list'] = df['float_list'].apply(parse_str_list)

方法二:正则替换(更严谨)

如果字符串里可能存在包含nan的其他子串(比如nan_value),用正则匹配独立的nan单词,避免误替换:

import re
import ast
import numpy as np
import pandas as pd

df = pd.DataFrame({'float_list': ['[1.21, nan, nan_value, 100]', '[3.4, nan, 5.6]']})

def parse_str_list(s):
    # 匹配独立的nan(前后是单词边界),替换为None
    processed_str = re.sub(r'\bnan\b', 'None', s)
    raw_list = ast.literal_eval(processed_str)
    return [np.nan if item is None else item for item in raw_list]

df['parsed_list'] = df['float_list'].apply(parse_str_list)

这两种方法都能高效完成转换,其中正则替换的通用性更强,适合复杂场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 08:44:59