转换应该是数据框列中浮点数列表的字符串? [复制]
Posted
技术标签:
【中文标题】转换应该是数据框列中浮点数列表的字符串? [复制]【英文标题】:Transform string that should be list of floats in a column of dataframe? [duplicate] 【发布时间】:2021-11-08 19:10:30 【问题描述】:我在数据框中有一列,它是从另一个数据框的列名创建的(使用melt
函数。因此,这些值是字符串,而不是内部带有浮点数的列表。列如下所示:
interval |
---|
[100.00, 3.00] |
[3.00, 2.00] |
[2.00, 1.00] |
[1, 0.25] |
[0.25, 0.00] |
我需要的是一个带有浮动列表的列。 For 循环看起来不是一个好的或优雅的想法,我没有任何其他的......
【问题讨论】:
df['interval'].dtype
的输出结果是什么?我怀疑这会给你对象数据类型。如果你深入研究区间的内容,你会发现列是数据类型对象,但每个行对象都是浮点数列表。例如,执行type(df.at[0,'interval'])
和type(df.at[0,'interval'][0])
之类的操作来检查第一行。
它是一个对象,但该对象实际上是无法转换为浮点数的字符串。经过一段时间的努力,我意识到,每个元素都是一个像“[100.00, 3.00]”这样的字符串
【参考方案1】:
使用ast.literal_eval
:
import ast
df['interval'] = df['interval'].apply(ast.literal_eval)
输出
>>> df
interval
0 [100.0, 3.0]
1 [3.0, 2.0]
2 [2.0, 1.0]
3 [1, 0.25]
4 [0.25, 0.0]
>>> df.loc[0, 'interval']
[100.0, 3.0]
>>> type(df.loc[0, 'interval'])
list
现在您可以根据需要转换为列:
>>> df['interval'].apply(pd.Series)
0 1
0 100.00 3.00
1 3.00 2.00
2 2.00 1.00
3 1.00 0.25
4 0.25 0.00
【讨论】:
以上是关于转换应该是数据框列中浮点数列表的字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章