如何从dtype为列表的Pandas系列中删除NaN?

时间:2017-01-04 06:21:40

标签: python list pandas numpy nan

我是pandas.Series,其中每行的dtype是列表对象。 E.g。

>>> import numpy as np
>>> import pandas as pd
>>> x = pd.Series([[1,2,3], [2,np.nan], [3,4,5,np.nan], [np.nan]])
>>> x
0         [1, 2, 3]
1          [2, nan]
2    [3, 4, 5, nan]
3             [nan]
dtype: object

如何删除每行列表中的nan

所需的输出是:

>>> x
0         [1, 2, 3]
1               [2]
2         [3, 4, 5]
3                []
dtype: object

这有效:

>>> x.apply(lambda y: pd.Series(y).dropna().values.tolist())
0          [1, 2, 3]
1              [2.0]
2    [3.0, 4.0, 5.0]
3                 []
dtype: object

是否有比使用lambda更简单的方法,将列表转换为Series,删除NaN然后再将值提取回列表?

2 个答案:

答案 0 :(得分:6)

您可以将class Category extends Node { public function conversations () { return $this->hasMany('App\Conversation'); } public function questions () { return $this->hasManyThrough('App\Question', 'App\Conversation'); } } pandas.notnull一起用于删除$category->questions->count()值:

list comprehension

NaN的另一个解决方案,条件print (x.apply(lambda y: [a for a in y if pd.notnull(a)])) 0 [1, 2, 3] 1 [2] 2 [3, 4, 5] 3 [] dtype: object 仅适用于filter

v!=v

感谢DYZ寻求其他解决方案:

NaN

答案 1 :(得分:1)

包含列表理解的简单numpy解决方案:

pd.Series([np.array(e)[~np.isnan(e)] for e in x.values])