+-
如何检查Pandas数据框内的列表是否为空?

我有一个熊猫数据框架

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.lenSeries.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]