zoukankan      html  css  js  c++  java
  • pandas 获取不符合条件/不包含某个字符串的dataframe

    工作中数据的处理中往往会遇到筛选出不符合条件的或者不包含某个字符的dataframe,我们会如何去做呢?

    可能你会想到用python写一个函数,然后用panda的apply函数或者map函数来进行处理,不可否认这是一中方法,但是实际上pandas中已经给我们开发了这样的函数,那我们为什么不直接调用呢?

    首先看一下,怎么筛选出包含某些字符串的数据

    #这是使用语法,模糊匹配
    df[ df['通信名称'].str.contains('联通|移动|小灵通|电信')]
    #这一种方法不是匹配,而是等于后面列表中的值,要注意区别
    df[ df['通信名称'].isin(['联通','移动','小灵通','电信'])]

    包含的字符串比较多时就用’|‘管道符隔开

    那取出不包含这些字符串的数据怎么操纵呢,很简单,就是在前面加上一个~这种波浪符号就可以了

    df[~ df['通信名称'].str.contains('联通|移动|小灵通|电信')]

    没错就是这么简单的操作,但是contains也有一个不好的地方,就是如果某一列数据时文本型数据,处理起来就不是那么完美,因为contains函数类似于模糊查询,所以会出现错误匹配或者超出我们需要的匹配范围

    问题又来了如果我们的条件是多个怎么办呢?

    我们就需要这样来做

    df[ df['通信名称'].str.contains('联通|移动|小灵通|电信') | df['通信备注'].str.contains('公告|活动|提示|优惠') ]
    # 或者这样写
    df[df["col1"].str.contains('this|that')==False and df["col2"].str.contains('foo|bar')==True]

    当然,到哪里都离不开的正则表达式在这里也是可以用的

    pattern=r'.*?'
    df[df[columns].str.contains(pattern)]

    这样你就可以根据自己的需求快乐的指定匹配原则了。

    版权声明:本文为CSDN博主「Danker01」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_42575020/article/details/95344914

  • 相关阅读:
    交叉编译OpenCV的教程——基于aarch64-linux-gnu的交叉编译器
    Day01:我的Python学习之路
    将中文库导入到ARM板子中以解决中文显示乱码的教程
    Linux环境下挂载SD卡的教程
    Ubuntu下压缩与解压各种文件的命令
    Ubuntu14.04环境下Qt5.5以上版本无法输入中文的解决教程
    编程之美:队列中的最大最小值
    leetcode:Compare Version Numbers
    leetcode:Search for a Range
    csapp:无符号数可能造成的程序bug
  • 原文地址:https://www.cnblogs.com/lnd-blog/p/15005357.html
Copyright © 2011-2022 走看看