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

如何将Pandas DataFrame行内列表中的字符串数字转为浮点型?

如何将Pandas DataFrame列表列中的字符串元素转换为浮点型?

先看你的场景:你的exp_df里的allmz列,每行都是由字符串数字组成的列表,通过exp_df['allmz'] = exp_df['allmz'].apply(lambda x: x.split(" "))生成。你尝试了两种方法都没成功:

  1. 用iteritems遍历赋值,结果原DataFrame里的元素还是字符串
  2. 尝试用lambda结合生成器表达式,但不确定写法是否正确

为什么之前的方法无效?

  • 第一种方法里,mzz = float(mzz)只是修改了临时变量mzz,并没有改变原列表中的元素——因为你只是取出了列表里的元素复制给mzz,修改这个副本不会影响原列表。
  • 第二种方法的lambda返回的是生成器对象,而不是你需要的浮点型列表,所以无法正确替换原列的内容。

正确的解决方案

方法1:用apply+列表推导式(推荐,简洁直观)

既然allmz列已经是字符串列表了,直接用apply遍历每个列表,把每个元素转成float即可:

exp_df['allmz'] = exp_df['allmz'].apply(lambda x: [float(y) for y in x])

如果你的allmz列还没做split处理(比如原始数据是空格分隔的字符串),可以把split和转float合并:

exp_df['allmz'] = exp_df['allmz'].apply(lambda x: [float(y) for y in x.split(" ")])

方法2:原地修改列表元素(适合需要逐行自定义处理的场景)

如果你一定要用遍历的方式,需要直接修改原列表的索引位置元素(因为列表是可变对象,修改索引会直接改变原列表):

for ind, mzlist in exp_df['allmz'].iteritems():
    # 遍历列表的索引,直接修改对应位置的元素
    for i in range(len(mzlist)):
        mzlist[i] = float(mzlist[i])

验证结果

执行完上面任意一种方法后,运行以下代码验证:

print(type(exp_df.iloc[0]['allmz'][0]))

输出应该是<class 'float'>,说明转换成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:36:26