Creating DataFrame with list of dictionaries with np.array values
我有一个字典列表,其中的值作为numpy数组返回(通常为空)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | data=[{'width': array([])}, {'width': array([])}, {'width': array([])}, {'width': array([])}, {'width': array([])}, {'width': array([ 0.64848222])}, {'width': array([ 0.62241745])}, {'width': array([ 0.76892571])}, {'width': array([ 0.69913647])}, {'width': array([ 0.7506934])}, {'width': array([ 0.69087949])}, {'width': array([ 0.65302866])}, {'width': array([ 0.67267989])}, {'width': array([ 0.63862089])}] |
我想创建一个dataFame,如果值是浮动的,而不是numpy数组的数据类型。另外,我希望将空数组转换为NaN值。
我试过使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | width 0 [] 1 [] 2 [] 3 [] 4 [] 5 [0.648482224582] 6 [0.622417447245] 7 [0.768925710479] 8 [0.699136467373] 9 [0.75069339816] 10 [0.690879488242] 11 [0.653028655088] 12 [0.672679885077] 13 [0.638620890633] |
号
我还尝试在使用
我试图为datafame获得的最终输出如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | width 0 NaN 1 NaN 2 NaN 3 NaN 4 NaN 5 0.648482224582 6 0.622417447245 7 0.768925710479 8 0.699136467373 9 0.75069339816 10 0.690879488242 11 0.653028655088 12 0.672679885077 13 0.638620890633 |
可以使用列表理解从字典中的数组中提取数据。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | >>> pd.DataFrame([d['width'][0] if d['width'].shape[0] else None for d in data], columns=['width']) width 0 NaN 1 NaN 2 NaN 3 NaN 4 NaN 5 0.648482 6 0.622417 7 0.768926 8 0.699136 9 0.750693 10 0.690879 11 0.653029 12 0.672680 13 0.638621 |
从
1 | df.width = df.width.str[0] |
号
这是因为我们只是使用
最后是一列float64值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | width 0 NaN 1 NaN 2 NaN 3 NaN 4 NaN 5 0.648482 6 0.622417 7 0.768926 8 0.699136 9 0.750693 10 0.690879 11 0.653029 12 0.672680 13 0.638621 |
注意:如果您想显示更多的小数位,您需要使用
或者,您可以在构造数据帧之前处理列表:
1 | pd.DataFrame([x.get('width') for x in data], columns=['width']) |
。
获取发布的数据帧后,请尝试此操作:
1 2 3 4 5 6 7 | def convert(x): if len(x) == 0: return np.nan else: return x[0] df['width'] = df['width'].apply(lambda x: convert(x)) |