我是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
然后再将值提取回列表?
答案 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])