从Pandas数据框中删除空的方括号

3

我有一个pandas的数据框,其中某些列包含空的方括号,如下所示

代码

data = pd.DataFrame(dict(A=[5,3,5,6], C=[['man','talk'],['bar'],[],['bat','cat','mat']]))

DataFrame 数据框
    A   C
0   5   [man, talk]
1   3   [bar]
2   5   []
3   6   [bat, cat, mat]

我需要删除包含空方括号的行。

所需数据框

    A   C
0   5   [man, talk]
1   3   [bar]
2   6   [bat, cat, mat]

我尝试了 data = data[data["C"].str.contains("[]") == False],但是出现了错误 error: unterminated character set at position 0。如何从数据框中删除所有这些行。 提前致谢。
4个回答

3
您可以使用str.len检查列表的长度,并在长度大于0时使用布尔数组进行切片:
data[data['C'].str.len().gt(0)]

或者,将其转换为布尔值(似乎是最快的方法):
data[data['C'].astype(bool)]

输出:

   A                C
0  5      [man, talk]
1  3            [bar]
3  6  [bat, cat, mat]

1
请使用.str[index],然后使用dropna()。
data[data['C'].str[0].notna()]



 A                C
0  5      [man, talk]
1  3            [bar]
3  6  [bat, cat, mat]

有趣的是,如果存在像 [np.nan] 这样的列表,这种方法就不起作用了 ;) - mozway
当然,但指出限制总是很重要的 ;) - mozway

1
你可以简单地这样做:
data[data['C'].map(lambda d: len(d)) > 0]

   A                C
0  5      [man, talk]
1  3            [bar]
3  6  [bat, cat, mat]

1
data.loc[data.C.apply(len)!=0]

  A                C
0  5      [man, talk]
1  3            [bar]
3  6  [bat, cat, mat]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接