+-

我有一个熊猫数据框架
list1 = ['A','B', 'C', 'D' ]
list2 = ['P','Q', 'R', 'S' ]
list3 = ['A', 'B', 'C', 'D']
list4 = [[1,3,5], [], [2,4,1,5], []]
df = pd.DataFrame({'col1' : list1,
'col2' : list2,
'col3':list3,
'numlist' : list4
})
print(df)
col1 col2 col3 numlist
0 A P A [1, 3, 5]
1 B Q B []
2 C R C [2, 4, 1, 5]
3 D S D []
我想获取列numlist不为空的所有行的索引,然后创建一个新的数据框架,其中的行与索引相匹配。我正在尝试以下代码
df[(len(df['numlist']))==0]
但是这段代码却抛出了Key Error。我怎样才能实现同样的功能?
3
投票
投票
空列表转换为boolen return False 是可以这样过滤的。
df1 = df[df['numlist'].astype(bool)]
你的解决方案应该被改变 Series.str.len 与 Series.ne 为不等于。
df1 = df[df['numlist'].str.len().ne(0)]
替代品。
df1 = df[df['numlist'].str.len() != 0]
print(df1)
col1 col2 col3 numlist
0 A P A [1, 3, 5]
2 C R C [2, 4, 1, 5]
1
投票
投票
你可以用 apply 并检查 x != [] 列表是否为空的条件。
>>> df = df[df.numlist.apply(lambda x: x != [])]
>>> df
col1 col2 col3 numlist
0 A P A [1, 3, 5]
2 C R C [2, 4, 1, 5]