如何从熊猫数据框中列出的名单,跳过NaN值

问题描述:

我有一个熊猫数据帧,看起来大致是如何从熊猫数据框中列出的名单,跳过NaN值

foo foo2 foo3 foo4 
a NY WA  AZ NaN 
b DC NaN NaN NaN 
c MA CA  NaN NaN 

我想使这个数据帧的意见的嵌套列表,但省略NaN值,所以我有[['NY','WA','AZ'],['DC'],['MA',CA']]之类的东西。

在这个数据框中有一个模式,如果这有所作为,那么如果fooX为空,则随后的列fooY也将为空。

我最初有类似下面的代码。我敢肯定有一个更好的办法做到这一点

A = [[i] for i in subset_label['label'].tolist()] 
B = [i for i in subset_label['label2'].tolist()] 
C = [i for i in subset_label['label3'].tolist()] 
D = [i for i in subset_label['label4'].tolist()] 
out_list = [] 
for index, row in subset_label.iterrows(): 
out_list.append([row.label, row.label2, row.label3, row.label4]) 
out_list 

试试这个:

In [77]: df.T.apply(lambda x: x.dropna().tolist()).tolist() 
Out[77]: [['NY', 'WA', 'AZ'], ['DC'], ['MA', 'CA']] 

选项1
pd.DataFrame.stack滴呐默认。

df.stack().groupby(level=0).apply(list).tolist() 

[['NY', 'WA', 'AZ'], ['DC'], ['MA', 'CA']] 

___

选项2
有趣的选择,因为我觉得熊猫对象中总结列出的乐趣。

df.applymap(lambda x: [x] if pd.notnull(x) else []).sum(1).tolist() 

[['NY', 'WA', 'AZ'], ['DC'], ['MA', 'CA']] 

选项3
numpy实验

nn = df.notnull().values 
sliced = df.values.ravel()[nn.ravel()] 
splits = nn.sum(1)[:-1].cumsum() 
[s.tolist() for s in np.split(sliced, splits)] 

[['NY', 'WA', 'AZ'], ['DC'], ['MA', 'CA']]