如何将Pandas中object类型的列转换为float类型?
解决Pandas DataFrame字符串格式数值列表转浮点型列表的问题
你的需求是把存储为字符串格式的数值列表转换为实际的浮点型数值列表,以下是两种可靠的实现方法:
方法一:使用ast.literal_eval
ast.literal_eval是Python标准库中安全解析字符串为Python原生对象的工具,适合处理这种格式规范的字符串列表。
import pandas as pd import ast 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(ast.literal_eval) # 验证结果:查看第一个元素的类型及其中元素的类型 print(type(df['col1'][0])) # <class 'list'> print(type(df['col1'][0][0])) # <class 'float'>
方法二:使用json.loads
由于你的字符串格式完全符合JSON数组的规范,也可以用json模块来解析:
import pandas as pd import json 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(json.loads) # 验证结果 print(df['col1'].apply(lambda x: isinstance(x[0], float)).all()) # True
注意事项
- 处理后,DataFrame的
col1列类型仍为object,但列中的每个元素都是浮点型数值组成的列表,这是Pandas对列表类型数据的存储方式。 - 如果字符串中存在格式错误(比如多余的符号、非数值内容),两种方法都会抛出异常,需要提前做数据清洗。
内容的提问来源于stack exchange,提问作者Badrun Nessa Antu
相关产品推荐
相关产品推荐

