将列表字符串转换为浮点数列表 [pandas]

5

当在pandas中导入数据时,数据看起来像这样:

>>> BOM.PriceQty['substrate']
'[200.0, 300.0, 500.0]'

如何将其转换为浮点数列表? 尝试使用convert_object:

>>> BOM.PriceQty['substrate'].convert_object(convert_numeric=True)

追踪回溯(最近的调用在最上面):File "", line 1, in AttributeError: 'str'对象没有属性'convert_object'

谢谢!


它已经看起来像是一个浮点数列表了,type(BOM.PriceQty['substrate'][0]) 显示什么? - EdChum
1
看起来像是一个表示列表的字符串,如果是这种情况,你必须对字符串进行求值:eval(BOM.PriceQty['substrate']) - joris
1
这是一个看起来像浮点数列表的字符串。快速而不太严谨的解决方案是将该字符串传递给 eval。然而,这可能不是一个好主意 - MB-F
type(BOM.PriceQty['substrate'][0]) 显示 <class 'str'> - Shuki
2个回答

5

这段代码可以将表示浮点数列表的字符串转换为实际的浮点数列表:

s = '[200.0, 300.0, 500.0]'
l = [float(x.strip(' []')) for x in s.split(',')]
strip 函数从拆分结果中移除任何' ''['']' 字符。
In [1]: l
Out[1]: [200.0, 300.0, 500.0]

如果你想将此转换应用到整个列中,将其作为lambda函数进行apply

BOM.PriceQty.apply(lambda s: [float(x.strip(' []')) for x in s.split(',')])

0
你可以按照以下方式使用字面评估:
from ast import literal_eval

BOM.PriceQty['substrate'] = BOM.PriceQty['substrate'].apply(lambda x: literal_eval(str(x)))

str(x)是为了避免异常情况而添加的保护措施,如果输入数据是一个列表,可以将其移除。如果列值始终为字符串,您可以将其移除。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接