将DataFrame列从object转为float时遇ValueError错误求助
问题分析
你这段代码报错的核心原因是:apply执行后,col1里的每个元素都变成了浮点数列表,而df.astype(float)要求列中的每个元素必须是单个数值类型,不能是序列(比如列表),所以触发了ValueError。
解决方案
根据你的实际需求,分两种情况处理:
情况1:把列表拆分成多列(每个数值对应单独的float列)
如果你的目标是把每个字符串里的多个数值拆成独立的float列,可以这样写:
import pandas as pd df = pd.DataFrame({'col1': ['[-0.8783137, 0.05478287, -0.08827557, 0.69203985, 0.06209986]', '[0.31444644, -0.6546649, 0.7211526, 0.9819127, 0.74042267]']}) # 先把字符串转成浮点数列表,再扩展成多列 df = df['col1'].apply(lambda x: pd.Series([float(i.strip()) for i in x.strip('[]').split(',')])) print(df)
运行后会得到5列,每列都是float类型,对应原字符串里的每个数值。
情况2:保留列表结构(不强制转成单个float列)
如果你只是想让列里的元素是浮点数列表,不需要转成单个float(因为Pandas的float类型列只能存储单个浮点数,无法存储列表),那直接去掉astype(float)这一行即可:
import pandas as pd df = pd.DataFrame({'col1': ['[-0.8783137, 0.05478287, -0.08827557, 0.69203985, 0.06209986]', '[0.31444644, -0.6546649, 0.7211526, 0.9819127, 0.74042267]']}) df['col1'] = df['col1'].apply(lambda x: [float(i.strip()) for i in x.strip('[]').split(',')]) # 去掉astype(float),直接保留列表结构 print(df) print(df['col1'].apply(type)) # 可以看到每个元素是list类型
内容的提问来源于stack exchange,提问作者Badrun Nessa Antu
相关产品推荐
相关产品推荐

