如何将元素为字符串列表的object类型pandas Series转换为float类型
报错原因
pd.to_numeric()仅支持转换一维标量序列,无法直接处理每行嵌套列表的结构,直接传入列表元素会触发类型不匹配错误。astype()传入列名-类型字典的语法,仅在对整个DataFrame做多列类型转换时生效。如果已经通过df['mycol']取到单列Series对象,再传入字典参数会被pandas误判为转换目标值,触发TypeError: unhashable type: 'Series'报错。
转换实现
列中每个元素都是字符串构成的列表,只需要逐行遍历列表,把内部每个字符串转成浮点型即可,两种常用实现:
- 列表推导式(性能最优,推荐)
# 把mycol替换成你实际的列名 df['mycol'] = [ [float(num_str) for num_str in row] for row in df['mycol'] ]
- apply写法(适配pandas链式调用场景)
df['mycol'] = df['mycol'].apply(lambda row: [float(item) for item in row])
转换完成后可以做类型校验:
# 输出第一行第一个元素的类型,预期返回 float print(type(df['mycol'].iloc[0][0]))
针对给出的示例Series,转换后效果如下:
0 [1703.0, 1144.0, 2172.0, 735.0] 1 [1120.0, 637.0, 2026.0, 1599.0] 2 [2663.0, 859.0, 2281.0, 1487.0] 3 [1407.0, 1987.0, 696.0] 4 [1392.0, 1971.0, 552.0] 5 [1025.0, 1566.0, 581.0] 6 [768.24] 7 [527.0] 8 [731.96] 9 [664.48] Name: mycol, dtype: object
注意:转换后列的dtype依然是object属于正常现象,pandas原生浮点类型不支持存储可变长度列表,只要列表内部元素为float类型即满足需求。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

