【问题标题】:Removing Null Square Brackets from Pandas Dataframe从 Pandas 数据框中删除空方括号
【发布时间】:2022-11-16 01:10:36
【问题描述】:

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

代码

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

数据框

    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 。如何从数据框中删除所有这些行。 提前致谢

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以使用 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]
    

    【讨论】:

      【解决方案2】:

      请 .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] 这样的列表,这将不起作用;)
      • 当然,但指出限制总是很重要的;)
      【解决方案3】:

      你可以简单地这样做:

      data[data['C'].map(lambda d: len(d)) > 0]
      
         A                C
      0  5      [man, talk]
      1  3            [bar]
      3  6  [bat, cat, mat]
      

      【讨论】:

        【解决方案4】:
        data.loc[data.C.apply(len)!=0]
        
          A                C
        0  5      [man, talk]
        1  3            [bar]
        3  6  [bat, cat, mat]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-09
          • 1970-01-01
          • 2017-02-17
          • 2016-11-03
          • 2016-08-18
          相关资源
          最近更新 更多