Python数据清洗之利用pandas筛选数据详解

 更新时间:2023年08月24日 09:55:57   作者:sodaloveer  
这篇文章主要介绍了Python数据清洗之利用pandas筛选数据详解,Pandas是一个用于数据分析和处理的Python库,它提供了高效的数据结构和数据分析工具,使得数据的清洗、转换、分析和可视化变得更加容易和灵活,需要的朋友可以参考下

利用pandas筛选数据

在Pandas中,最常用的数据结构是Series和DataFrame。

Series是一维的数组-like对象,用于存储任意类型的数据。

DataFrame是二维的表格型数据结构,可以存储多种类型的数据,并且可以进行灵活的数据操作和分析。

直接筛选

比较运算符(==、<、>、>=、<=、!=)逻辑运算符 &(与)、|(或)、~(非),使用比较运算符时,请将每个条件括在括号内

运算符的优先级是NOT(〜),AND(&),OR(|)。

读取数据

import os
import pandas as pd
import numpy as np
#读取文件
def read_file(filepath):
    os.chdir(os.path.dirname(filepath))
    return pd.read_csv(os.path.basename(filepath),encoding='utf-8')
file_pos="C:\\Users\\周晓婷\\Desktop\\train_data_original.csv"
data_pos=read_file(file_pos)

查看数据类型

data_pos.dtypes

在这里插入图片描述

筛选出frand_flag为0的数据

data_pos[data_pos['frand_flag']==0] ##用比较运算符‘=='直接筛选

筛选出frand_flag不为1的数据

data_pos[data_pos['frand_flag']!=1] 
data_pos[~(data_pos['frand_flag']==1)]

筛选cdr_duration>=15的数据

data_pos[data_pos['cdr_duration']>=15] ##用比较运算符“>=”直接筛选

筛选cdr_duration<15的数据

data_pos[data_pos['cdr_duration']<15]

筛选cdr_duration<=15且frand_flag=0的数据

data_pos[(data_pos['cdr_duration']<=15)&(data_pos['frand_flag']==0)]

筛选cdr_duration<=15或cdr_duration>60的数据

data_pos[(data_pos['cdr_duration']<=15)|(data_pos['cdr_duration']>60)]

函数筛选

比较函数(eq, ne, le, lt, ge, gt)

筛选出frand_flag为0的数据

data_pos[data_pos['frand_flag'].eq(0)]

筛选出frand_flag不为1的数据

data_pos[data_pos['frand_flag'].ne(1)] 

筛选cdr_duration>=15的数据

data_pos[data_pos['cdr_duration'].ge(15)]

筛选cdr_duration<=15的数据

data_pos[data_pos['cdr_duration'].le(15)]

筛选cdr_duration<=15且frand_flag=0的数据

data_pos[(data_pos['cdr_duration'].le(15))&(data_pos['frand_flag'].eq(0))]

范围运算 between(left,right)

筛选cdr_duration>=15或cdr_duration<=60的数据

data_pos[data_pos['cdr_duration'].between(15,60)]

筛选start_date>=20220701且start_date<=20221031的数据

data_pos[data_pos['start_date'].between(20220701,20221031)]

字符筛选 Series.str.contains(pattern或字符串,na=False)

测试pattern或regex是否包含在Series或Index的字符串中。

Series列要为字符数据类型

最终返回:布尔值的系列或索引。

布尔值的Series或Index,指示给定模式是否包含在Series或Index的每个元素的字符串中。

函数语法:

Series.str.contains(pat,case = True,flags = 0,na = nan,regex = True)

参数说明如下:

参数描述
patstr类型。字符序列或正则表达式。
casebool,默认为True。如果为True,区分大小写。
flagsint,默认为0(无标志)。标志传递到re模块,例如re.IGNORECASE。
na默认NaN,填写缺失值的值。
regexbool,默认为True。如果为True,则假定pat是正则表达式。如果为False,则将pat视为文字字符串。所以针对特殊符号,默认情况下我们必须使用转义符,或者设置 regex=False。

筛选billing_nbr为移动号码,移动号码用正则表达式

#该列转换为字符数据类型(2种方法)
data_pos['billing_nbr']=data_pos['billing_nbr'].apply(str)
data_pos['billing_nbr']=data_pos['billing_nbr'].values.astype('str')
data_pos=data_pos[data_pos['billing_nbr'].str.contains('^1[35678]\d{9}$')]
print(data_pos.shape)

模糊查询,筛选某列中包含某个字符,比如“筛选start_date为202207的数据”

data_pos['start_date']=data_pos['start_date'].apply(str)
data_pos=data_pos[data_pos['start_date'].str.contains('202207')]
print(data_pos.shape)

筛选channel_type_desc为实体渠道的数据,na=False的意思就是,遇到非字符串的情况,直接忽略。你也可以写na=True,意思就是遇到非字符串的情况,计为筛选有效。如果遇到非字符串没有标明na参数会报错。

data_pos_1=data_pos_1[data_pos_1['channel_type_desc'].str.contains('实体渠道',na=False)]

apply()函数

筛选出frand_flag为0的数据

data_pos[data_pos['frand_flag'].apply(lambda x:x==0)]

截取billing_nbr前7位数

data_pos['billing_nbr']=data_pos['billing_nbr'].apply(str)
data_pos['billing_nbr_pre7']=data_pos['billing_nbr'].apply(lambda x:x[0:8])
data_pos['billing_nbr_pre7']=data_pos['billing_nbr'].map(lambda x:x[0:8])

筛选billing_nbr为移动号码,移动号码用正则表达式

import re
def func(x):
	if re.search('^1[35678]\d{9}$',x):
		return(True)
	else:
		return(False)
data_pos[data_pos['billing_nbr'].apply(func)]

筛选某一列并替换其他字符:筛选channel_type_desc列,将”含有实体渠道的“全部替换”实体渠道”,将“含有电子渠道的”全部替换成“电子渠道”,将“含有直销渠道的”全部替换成“直销渠道”,其他替换为未知。

未修改前,数据详情:

在这里插入图片描述

import re 
def func(data):
    if re.match(r'[\u4e00-\u9fa5]*实体渠道*[\u4e00-\u9fa5]',str(data)):
        return "实体渠道"
    elif re.match(r'[\u4e00-\u9fa5]*电子渠道*[\u4e00-\u9fa5]',str(data)):
        return "电子渠道"
    elif re.match(r'[\u4e00-\u9fa5]*直销渠道*[\u4e00-\u9fa5]',str(data)):
        return "直销渠道"
    else:
        return "未识别"
data_pos_1['channel_type_desc_1']=data_pos_1.channel_type_desc.apply(func)
import re
def func(x):
    if re.search(r'[\u4e00-\u9fa5]*实体渠道*[\u4e00-\u9fa5]',str(x)):
        return "实体渠道"
    elif re.search(r'[\u4e00-\u9fa5]*电子渠道*[\u4e00-\u9fa5]',str(x)):
        return "电子渠道"
    elif re.search(r'[\u4e00-\u9fa5]*直销渠道*[\u4e00-\u9fa5]',str(x)):
        return "直销渠道"
    else:
        return "未识别"
data_pos_1['channel_type_desc_1']=data_pos_1.channel_type_desc.apply(func)   

数据替代后,数据详情:

在这里插入图片描述

isin()函数,支持多值筛选,用列表表示

筛选出frand_flag为0的数据

data_pos[data_pos['frand_flag'].isin([0])]

筛选出called_nbr包含10086、10010、10016、114的数据

data_pos[data_pos['called_nbr'].isin([10086,10010,10016,114])]

~isin()

筛选called_nbr不包含10086、10010、10016、114的数据

data_pos[~data_pos['called_nbr'].isin([10086,10010,10016,114])]

到此这篇关于Python数据清洗之利用pandas筛选数据详解的文章就介绍到这了,更多相关pandas筛选数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python实现在sqlite动态创建表的方法

    python实现在sqlite动态创建表的方法

    这篇文章主要介绍了python实现在sqlite动态创建表的方法,涉及Python操作SQLite数据库创建数据表的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-05-05
  • python去除字符串中空格的6种常用方法

    python去除字符串中空格的6种常用方法

    最近业务需要对Pyhon中的一些字符串内容去除空格,方便后续处理,下面这篇文章主要给大家介绍了关于python去除字符串中空格的6种常用方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • 用python处理图片实现图像中的像素访问

    用python处理图片实现图像中的像素访问

    本篇文章主要介绍了用python处理图片实现图像中的像素访问,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Python搭建Gitee图床的示例代码

    Python搭建Gitee图床的示例代码

    在写博客的过程中经常要插入图片,本文将使用Python实现对上传的图片自动压缩,自动编码,以及自动推送到远程仓库,感兴趣的可以了解一下
    2021-10-10
  • Python 3.6打包成EXE可执行程序的实现

    Python 3.6打包成EXE可执行程序的实现

    这篇文章主要介绍了Python 3.6打包成EXE可执行程序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • python去除所有html标签的方法

    python去除所有html标签的方法

    这篇文章主要介绍了python去除所有html标签的方法,涉及Python正则替换的相关技巧,非常简单实用,需要的朋友可以参考下
    2015-05-05
  • Python编写Windows Service服务程序

    Python编写Windows Service服务程序

    这篇文章主要为大家详细介绍了Python编写Windows Service服务程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 详解python websocket获取实时数据的几种常见链接方式

    详解python websocket获取实时数据的几种常见链接方式

    这篇文章主要介绍了详解python websocket获取实时数据的几种常见链接方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 用yum安装MySQLdb模块的步骤方法

    用yum安装MySQLdb模块的步骤方法

    在python2.7版本中,MySQLdb模块还不是python的内置模块,但是MySQLdb模块又是Python与MySQL连接的桥梁,对于作为MySQL DBA又很喜欢Python语言的我来说,MySQLdb真的是必需品呢。所以就需要自己进行安装了,这篇文章就给大家详细介绍了关于用yum安装MySQLdb模块的步骤。
    2016-12-12
  • python密码学RSA密码解密教程

    python密码学RSA密码解密教程

    这篇文章主要为大家介绍了python密码学RSA密码解密教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05

最新评论