转换应该是数据框列中浮点数列表的字符串? [复制]

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

【讨论】:

以上是关于转换应该是数据框列中浮点数列表的字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

数据框列中的嵌套列表,提取数据框列中列表的值 Pyspark Spark

以字符串形式存储在 Pandas 数据框列中的解析列表

将字典映射到数据框列中的列表

数据框列中的字符串列表行之间的成对距离

如何使用模块 re 从数据框列中删除特殊字符? [复制]

将数据框列中的列表拆分为多列[重复]