使用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解决方案的人。
答案 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