Python:ValueError:分散要求y列为数字吗?

时间:2018-07-12 02:10:58

标签: python pandas

使用pd.Dataframe不会将列表的列转换为数据框:

下面是我的代码行,用于从我所看到的许多示例中读取.mat file并将其转换为dataframe

但是,当我读取列中的数据时,它们仍然保留为lists,并在数据周围带有方括号。我想做的是将其转换为适当的数据框,以便我可以将最后一列(时间数据)与其他列一起绘制为 x y 散点图。但是我得到的错误是 ValueError:分散要求y列为数字。我尚未显示用于绘制 x y 数据的代码。

import mat4py as mp
data = mp.loadmat('test.mat')
df = pd.DataFrame(data)

当我键入:

df.columns

我得到以下信息:

Index(['col 1', 'col 2',
       'col 3', 'col 4', ... 'col 189'] with dtype='object', length=189)

如果我输入:

df.['col 1']

我得到以下信息:

Out[95]: 
0       [0.0]
1       [0.0]
2       [0.0]
3       [0.0]
4       [0.0]
5       [0.0]
6       [0.0]
7       [0.0]
8       [0.0]
9       [0.0] 
... 1622 rows in total.

我什至尝试对列使用.apply(pd.to_numeric,errors ='coerce'),但这也不起作用。我究竟做错了什么?

更新: 下面提供的注释中的解决方案仅适用于单个列,但我希望此方法适用于数据框中的每个单元格。在整个数据帧上使用.apply(lambda ..)时,列将成为索引并弄乱数据帧。我找到了将lambda正确应用于每个单元并保留数据帧的解决方案。如下:

mm = df.applymap(lambda x: x[0])

非常感谢那些提供原始lambda解决方案的人。

2 个答案:

答案 0 :(得分:3)

您可以

df=pd.DataFrame({'col 1':[[0.0],[0.0]]})
df
Out[49]: 
   col 1
0  [0.0]
1  [0.0]
df['col 1'].apply(lambda x : x[0])
Out[50]: 
0    0.0
1    0.0
Name: col 1, dtype: float64

答案 1 :(得分:2)

如果[0.0]是字符串,

import ast
df.c.transform(ast.literal_eval).str[0]
1    0.0
2    0.0
3    0.0
4    0.0
5    0.0
6    0.0
7    0.0
8    0.0
9    0.0