• Python学习笔记:pandas筛选数据


    pandas 拥有强大的数据清洗能力,可以极大的简化数据处理工作。

    一、数据加载及EDA

    import os
    os.chdir(r'C:Users111Desktop') 
    
    # 加载数据
    import pandas as pd
    df = pd.read_excel("超市运营数据模板.xlsx")
    df.head()
    '''
    	商品ID	类别ID	门店编号	单价	销量	订单ID	日期	时间
    0	30006206	915000003	CDNL	25.23	0.328	20201003CDLG000210052759	2011-01-03	09:56
    1	30163281	914010000	CDNL	2.0	2.0	20201003CDLG000210052759	2011-01-04	09:56
    2	30200518	922000000	CDNL	19.62	0.23	20201003CDLG000210052759	2011-01-05	09:56
    3	29989105	922000000	CDNL	2.8	2.044	20201003CDLG000210052759	2011-01-06	09:56
    4	30179558	915000100	CDNL	47.41	0.226	20201003CDLG000210052759	2011-01-07	09:56
    '''
    
    # 处理日期字段
    import datetime
    df['日期'] = df['日期'].values.astype('datetime64')
    start_date = datetime.datetime.strptime('2020-04-30', '%Y-%m-%d').date() # 起始
    end_date = datetime.datetime.strptime('2020-06-01', '%Y-%m-%d').date() # 结束
    
    # EDA 数据探索
    df.dtypes
    df.门店编号.value_counts()
    '''
    CDLG    1331
    CDXL    1148
    CDNL     999
    Name: 门店编号, dtype: int64
    '''
    

    二、比较运算:“<”、">"、"=="、"<="、">="、"!="

    # 1.“==” 筛选
    df2 = df[df.门店编号 == 'CDXL']
    
    # 2.“<=” 比较运算符
    df4 = df[df.单价 <= 10]
    
    # 3.“>=” 比较运算符
    df6 = df[df.销量 >= 5]
    
    # 4.“!=” 比较运算符
    df8 = df[df.门店编号 != 'CDXL']
    

    三、比较函数:eq、ne、le、lt、ge、gt

    python3 中新函数 gt/ge/eq/le/lt 替代 python2 中的 cmp 函数。

    # 等同于比较运算符号 一一对应
    eq -- equal(等于)
    ne -- not equal(不等于)
    le -- less and equal(小于等于)
    lt -- lest than(小于)
    ge -- greater and equal(大于等于)
    gt -- greater than(大于)
    

    实操:

    # 1.eq函数 比较函数
    df3 = df[df['门店编号'].eq('CDXL')]
    
    # 2.le函数 比较函数
    df5 = df[df['单价'].le(10)]
    
    # 3.ge函数 比较函数
    df7 = df[df['销量'].ge(5)]
    
    # 4.ne函数 比较函数
    df9 = df[df['门店编号'].ne('CDXL')]
    
    # 5.Pandas.datetime64[ns] 不能直接与 datetime.date 比较
    # 需要通过 pd.Timestamp 转化
    df10 = df[(df.日期 > pd.Timestamp(start_date)) & (df.日期 < pd.Timestamp(end_date))]
    
    # 6.gt lt &
    df11 = df[(df['日期'].gt(pd.Timestamp(start_date))) & (df['日期'].lt(pd.Timestamp(end_date)))]
    

    四、范围运算:between(left, right)及apply

    # apply函数
    df12 = df[df['日期'].apply(lambda x: x.year == 2020 and x.month == 5)]
    
    # between函数
    df13 = df[df['日期'].between(pd.Timestamp(start_date), pd.Timestamp(end_date), inclusive=False)] # inclusive 参数可以设置边界
    

    五、筛选包含:contains、isin、startswith、endswith

    语法:contains(pat, case, flags, na, regex)

    # contains函数 包含
    df['类别ID'] = df['类别ID'].values.astype('str') # 转换为字符串类型
    df14 = df[df['类别ID'].str.contains('000', na=False)] # 默认对空值不处理 即输出结果还是 NaN
    
    df['商品ID'] = df['商品ID'].values.astype('str')
    df15 = df[df['商品ID'].str.contains('301d{5}', na=False)] # 正则表达式
    
    # startwith
    df16 = df[df['商品ID'].str.startswith('301')]
    
    # isin函数 是否在
    df17 = df[df['类别ID'].isin(['000'])] # 输入列表
    # 只能判断元素是否在列表中 无法判断包含 即 like 模式
    

    六、逻辑运算:&(与)、|(或)、!(非)

    使用 &(且) 和 |(或) 时每个条件都要用小括号括起来

    df[(df['price'] >= 100) & df['price'] < 200]
    

    选取多列一定是两个方括号,其中内侧方括号代表是一个list

    df[['name', 'price']][df['price'] > 200]
    df.loc[df['price'] >200, (['name', 'price'])] # 使用iloc loc函数
    

    某列等于多个数值、多个字符串

    df[df['price'].isin([10, 20, 30])]
    df.loc[(df['price'] == 10) | (df['price'] == 20) | (df['price'] == 30)] # 使用iloc loc函数
    

    参考链接:一次性总结了pandas提取数据的15种方法,统统只需1行代码!

    参考链接:[353]python3中新函数(gt,ge,eq,le,lt)替代Python2中cmp()函数

  • 相关阅读:
    echarts折线图
    利用echarts制作词云
    本周总结
    本周总结
    云服务器项目数据库连接超时问题解决
    iOS下载图片失败
    解决后台json数据返回的字段需要替换的问题
    设置User Agent
    Xcode升级到9.3之后pod问题
    gitLab创建自己的私有库
  • 原文地址:https://www.cnblogs.com/hider/p/15304726.html
Copyright © 2020-2023  润新知