如何有效地将数据帧转换为丢弃nan的列表

时间:2019-06-25 07:51:16

标签: python pandas numpy nan

将数据框转换为列表的有效方法是什么?这样做时,我要舍弃会导致列表大小不相等的nan值。

我可以轻松地将数据框转换为列表列表:

df_sequences = df.values.tolist()

但是它有很多nan值,对于数据框来说还可以,但是我不希望它们出现在列表中。所以我也尝试包括numpy:

test = np.array([[1,2,3],[np.nan,2,3]])
print(test)
print(~numpy.isnan(test))
x = test[~numpy.isnan(test)]
x

不幸的是我不明白,为什么在上面的示例中形状发生了变化,输出为:

[[ 1.  2.  3.]
 [nan  2.  3.]]
[[ True  True  True]
 [False  True  True]]
array([1., 2., 3., 2., 3.])

而且我也不知道将其应用于整个多维列表是否有效,也许有一种方法可以在转换为列表之前完成。

2 个答案:

答案 0 :(得分:0)

numpy数组(以及扩展名pandas DataFrame)的本质是它们具有一致的尺寸。因此,例如,每一行将具有与其他每一行相同的列数。

我认为,要在Python中完成您想做的事情,将需要嵌套的list理解:

[[element for element in row if ~np.isnan(element)] for row in df.values.tolist()]

答案 1 :(得分:0)

我认为您正在寻找这样的东西:

lists_not_nan = map(lambda row: filter(lambda val: not np.isnan(val), row), df.values)