我有一个包含几个系列的数据帧,其中包含包含NaN值的浮点数列表.例.

s[0] = '[1.21, 1.21, nan, nan, 100]'

我想将这些字符串转换为使用literal_eval的列表.当我try 时,我得到了错误ValueError: malformed node or string on line 1:,因为根据文档,nan个值无法转换,因为这些值无法识别.

将字符串中的nan个值转换为None,然后在应用literal_eval后再转换回np.nan值的最佳方法是什么?

推荐答案

如问题所述的解决方案-但得到None分而不是NaN分:

s.str.replace('nan', 'None', regex=True).apply(ast.literal_eval)

如果需要np.nan秒,请使用定制功能:

def convert(x):
    out = []
    for y in x.strip('[]').split(', '):
        try:   
           out.append(ast.literal_eval(y))
        except:
           out.append(np.nan)
    return out

s.apply(convert)

另一个 idea 是将所有值转换为浮点数:

f = lambda x: [float(y) for y in x.strip('[]').split(', ')]
s.apply(f)

pd.Series([[float(y) for y in x.strip('[]').split(', ')] for x in s], 
              index=s.index)

Python相关问答推荐

使用新的类型语法正确注释ParamSecdecorator (3.12)

可变参数数量的重载类型(args或kwargs)

为什么sys.exit()不能与subproccess.run()或subprocess.call()一起使用

如何过滤包含2个指定子字符串的收件箱列名?

如果满足某些条件,则用另一个数据帧列中的值填充空数据帧或数组

如何启动下载并在不击中磁盘的情况下呈现响应?

如何从列表框中 Select 而不出错?

Pandas Data Wrangling/Dataframe Assignment

Flash只从html表单中获取一个值

freq = inject在pandas中做了什么?''它与freq = D有什么不同?''

jsonschema日期格式

用fft计算指数复和代替求和来模拟衍射?

有没有办法在不先将文件写入内存的情况下做到这一点?

如何在Airflow执行日期中保留日期并将时间转换为00:00

没有内置pip模块的Python3.11--S在做什么?

高效生成累积式三角矩阵

如何根据一定条件生成段id

如何在Polars中创建条件增量列?

使用Django标签显示信息

Pandas:新列,从列表中采样,基于列值