如何从数据帧中按降序仅选择非空列。你知道吗
以下是数据帧:
df = pd.DataFrame( { 'a': [1,2,np.nan,np.nan],
'b': [10,20,30,40],
'c': [1,np.nan,np.nan,np.nan]})
a b c
0 1.0 10 1.0
1 2.0 20 NaN
2 NaN 30 NaN
3 NaN 40 NaN
我可以做到:
df.isnull().sum().sort_values(ascending=False)
c 3
a 2
b 0
但我想将多个命令链接到一行中,以便在一行中给出结果。你知道吗
我试过:
df.isnull().sum().sort_values(ascending=False).filter(lambda x: x>0)
它失败了
我知道这一点:
temp = df.isnull().sum().sort_values(ascending=False)
temp[temp>0]
c 3
a 2
但我正在寻找一种方法,以链接在一行继续。你知道吗
要求:
df.isnull().sum().sort_values(ascending=False).somefunction( x > 0)
更新
我找到了一种将序列转换为数据帧,然后使用查询的方法。你知道吗
df.isnull().sum().sort_values(ascending=False).to_frame().rename(columns={0:'temp'}).query("temp > 0")
这看起来又长又多余。有更好的办法吗?你知道吗
当然,有很多方法可以做到这一点,但一般来说,我不建议在传递python函数时使用lambda或过滤器,因为如果您的序列较大,这将使事情变得相当缓慢。 在你的情况下,你可以这样做 1用nan替换0并删除nan。你知道吗
这样做的缺点是需要输入convert两次(nan总是一个float,而不是int)。 2使用查询功能。你知道吗
这种方法的缺点是它只存在于数据帧上,因此需要先将序列转换为一个序列。但是,对于大型系列,这应该比类型转换便宜,因为基础数组保持不变。你知道吗
通过
isna
和any
对axis=0
的掩码使用.loc
:这对于
filter
来说是混淆的,因为它是用于索引的,而不是值相关问题 更多 >
编程相关推荐