开发者社区> 问答> 正文

如果所有行仅包含标点符号,如何检查和删除熊猫列?

我有一个包含多列的数据框,并且我想删除所有仅*包含任何标点符号的列。例如

    col_1 col_2 col_3  col_4
0      1     _    ab    1,235
1      2     ?    cd    8,900
2      3     _    ef    1,235
3      4     -    gh    8,900

在这里,我只想删除col_2。我该如何实现?

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 12:34:28 377 0
1 条回答
写回答
取消 提交回答
  • 想法是测试列的所有值是否由DataFrame.applyDataFrame.all中的Series.str.contains包含,最后由DataFrame.loc`包含过滤器:

    df = df.loc[:, df.astype(str).apply(lambda x: x.str.contains('\d|\w')).all()]
    

    要么:

    df = df.loc[:, df.astype(str).apply(lambda x: x.str.contains('\d|[a-zA-Z]')).all()]
    

    *

    print (df) col_1 col_3 col_4 0 1 ab 1,235 1 2 cd 8,900 2 3 ef 1,235 3 4 gh 8,900

    如果可能的话,可以在字符串中获取remove的所有值,在字符串的开头添加^,在字符串的末尾添加$,然后通过反转掩码:

    p = """[!"#$%&\'()\*,-./:;<=>?@[\\]^_ \` {|}~ ]"""
    df = df.loc[:, ~df.astype(str).apply(lambda x: x.str.contains('^' + p + '$')).all()]
    print (df)
       col_1 col_3  col_4
    0      1    ab  1,235
    1      2    cd  8,900
    2      3    ef  1,235
    3      4    gh  8,900
    

    回答来源:stackoverflow

    2020-03-24 12:34:35
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载