笔记:DataFrame数据的筛选和排序
目录
一、筛选
(一)索引的运用
(二)条件筛选
1.与:&
2.或:|
3.非:!=、~
(三)与常用函数结合
1.isin:
2.query:
3.contains:
二、排序
(一)修改列排序
1.df=df['new_column1','new_column2',...]:
2.df.insert(index, 'column_name', df.pop('column')):
3.reindex:
(二)行的排序
1.索引:df.sort_index(axis=0,ascending=False)
2.值:
一、筛选
(一)索引的运用
笔记:几个基本数据结构——Ndarray、Series和Dataframe_带带琪宝的博客-CSDN博客
索引主要用于行列的筛选,在之前的一篇文章中有涉及到DataFrame的切片和筛选,在文章里面 DataFrame 的索引部分,
(二)条件筛选
用最简单的例子看一下运用布尔索引筛选数据的原理:FALSE将不输出,若同时对行和列进行筛选,使用 df.loc[index 筛选条件,columns 筛选条件],先行后列
print(data2['门店号'] == 1001)
print(data2[(data2['门店号'] == 1001)])0 True
1 False
2 False...
4265 False
4266 False
4267 False
Name: 门店号, Length: 4268, dtype: bool日期 星期 门店号 码洋 天气 ... 客流量 客单数 交易数量 月份 门店
0 2023-01-31 二 1001 8105.611548 NaN ... 1577 859 2004 1 龙华店
36 2023-01-30 一 1001 7008.441083 NaN ... 1722 683 2444 1 龙华店
72 2023-01-29 日 1001 6386.655611 NaN ... 1160 768 2186 1 龙华店
... ... .. ... ... ... ... ... ... ... .. ...
4160 2023-04-03 一 1001 8766.757345 NaN ... 1074 837 1536 4 龙华店
4196 2023-04-02 日 1001 5313.663658 NaN ... 1334 783 2549 4 龙华店
4232 2023-04-01 六 1001 4538.680685 NaN ... 1918 685 2780 4 龙华店[120 rows x 11 columns]
1.与:&
如筛选出客流量大于500且成交率大于0.5的日期
print(data2.head(3))
df1=(data2[(data2['客流量'] > 500) & (data2['客单数']/data2['客流量'] >= 0.5)])
df2=(data2.loc[(data2['客流量'] > 500) & (data2['客单数']/data2['客流量'] >= 0.5), ['日期']])
print(df1.index)
print(df2)日期 星期 门店号 码洋 天气 实洋 客流量 客单数 交易数量 月份 门店
0 2023-01-31 二 1001 8105.611548 NaN 8105.611548 1577 859 2004 1 龙华店
1 2023-01-31 二 1002 8117.412956 NaN 8117.412956 1392 752 1462 1 石岩店
2 2023-01-31 二 1003 9369.565960 NaN 9369.565960 1661 949 1258 1 观澜店Index([ 0, 1, 2, 4, 5, 6, 9, 10, 12, 14,...4252, 4254, 4255, 4256, 4257, 4258, 4259, 4261, 4262, 4266],dtype='int64', length=2145)日期
0 2023-01-31
1 2023-01-31
2 2023-01-31
4 2023-01-31
5 2023-01-31
... ...
4258 2023-04-01
4259 2023-04-01
4261 2023-04-01
4262 2023-04-01
4266 2023-04-01[2145 rows x 1 columns]
2.或:|
如筛选出客流量大于1500或客单数大于800的日期
print(len(data2))
df=(data2.loc[(data2['客流量'] > 1500) | (data2['客单数'] > 800), ['日期']])
print(df.index)4268
Index([ 0, 2, 3, 4, 6, 9, 10, 11, 13, 14,...4256, 4257, 4258, 4259, 4260, 4261, 4262, 4265, 4266, 4267],dtype='int64', length=2996)
3.非:!=、~
在筛选条件较多时可以取非
print(data2.head(3))
print(data2[data2['门店号'] != 1001].index)日期 星期 门店号 码洋 天气 实洋 客流量 客单数 交易数量 月份 门店
0 2023-01-31 二 1001 8105.611548 NaN 8105.611548 1577 859 2004 1 龙华店
1 2023-01-31 二 1002 8117.412956 NaN 8117.412956 1392 752 1462 1 石岩店
2 2023-01-31 二 1003 9369.565960 NaN 9369.565960 1661 949 1258 1 观澜店Index([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,...4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266, 4267],dtype='int64', length=4148)
(三)与常用函数结合
1.isin:
df[df['column'].isin([ list ])] ,注意 isin 进行的是精确匹配而不是模糊匹配,可以将多个数值范围要求或字段要求通过列表的形式传入函数中进行筛选。
print(data2.head(3))
df = data2[data2['门店号'].isin(range(1001,1005))]
print(df)日期 星期 门店号 码洋 天气 实洋 客流量 客单数 交易数量 月份 门店
0 2023-01-31 二 1001 8105.611548 NaN 8105.611548 1577 859 2004 1 龙华店
1 2023-01-31 二 1002 8117.412956 NaN 8117.412956 1392 752 1462 1 石岩店
2 2023-01-31 二 1003 9369.565960 NaN 9369.565960 1661 949 1258 1 观澜店日期 星期 门店号 码洋 天气 ... 客流量 客单数 交易数量 月份 门店
0 2023-01-31 二 1001 8105.611548 NaN ... 1577 859 2004 1 龙华店
1 2023-01-31 二 1002 8117.412956 NaN ... 1392 752 1462 1 石岩店
36 2023-01-30 一 1001 7008.441083 NaN ... 1722 683 2444 1 龙华店
... ... .. ... ... ... ... ... ... ... .. ...
4197 2023-04-02 日 1002 3912.713637 NaN ... 1185 764 2917 4 石岩店
4232 2023-04-01 六 1001 4538.680685 NaN ... 1918 685 2780 4 龙华店
4233 2023-04-01 六 1002 4003.336703 NaN ... 1580 557 2403 4 石岩店[240 rows x 11 columns]
可以使用 ~ 号取反
df = data2[~data2['门店号'].isin(range(1001,1003))]
print(df)日期 星期 门店号 码洋 天气 ... 客流量 客单数 交易数量 月份 门店
2 2023-01-31 二 1003 9369.565960 NaN ... 1661 949 1258 1 观澜店
3 2023-01-31 二 1004 2778.225608 NaN ... 1997 748 795 1 香蜜湖店
4 2023-01-31 二 1006 9961.178449 NaN ... 1290 968 2537 1 公明店
... ... .. ... ... ... ... ... ... ... .. ...
4265 2023-04-01 六 3008 383.240643 NaN ... 1591 649 1363 4 惠州店
4266 2023-04-01 六 3009 5739.039035 NaN ... 1443 901 2294 4 佛山店
4267 2023-04-01 六 3010 9178.243621 NaN ... 1975 663 2122 4 福州店[4028 rows x 11 columns]
2.query:
query( ' expression ' ) :expression为字符串表达式,表示筛选的条件,可以结合前面的且、或、非使用,当标签有空格时,要再用反引号括起来,函数返回一个DataFrame,可以直接在后面根据索引获取最终想要的数据
现在有两类门店,我想查看两类门店的日期、门店、客流量几列数据,可以通过列表作为变量赋值
warehouse_list1=[1001,1002]
warehouse_list2=[3008,3009]
df=data2.query('门店号 in @warehouse_list1 | 门店号 in @warehouse_list2',inplace=False)[['日期','门店号','客流量']]
print(df)
# 由于有行和列,所以里面的[ ]是列数组,外面的[ ]是dataframe的行列值日期 门店号 客流量
0 2023-01-31 1001 1577
1 2023-01-31 1002 1392
33 2023-01-31 3008 1869
... ... ... ...
4233 2023-04-01 1002 1580
4265 2023-04-01 3008 1591
4266 2023-04-01 3009 1443
3.contains:
语法:df.str.contains(pat, case=True, na=None, regex=True)
pat:可以为字符串或正则表达式,用哪种方式查找
case:是否区分大小写
na:用来替换缺失值的,默认对空值不处理,即输出结果为 NaN
regex:即第一个参数,是否使用正则表达式的规则。
df.contains() 类似SQL里面的like,进行模糊查找,只能对字符类型的数据进行查找,比如我想找编号开头为 '30' 的店,需先转换数据类型,找到后再进行输出
print(data2.tail(3))
print(data2['门店号'].astype('str').str.contains('30')) # 输出的行
print(data2[data2['门店号'].astype('str').str.contains('30')].index) # 这些行的索引日期 星期 门店号 码洋 天气 ... 客流量 客单数 交易数量 月份 门店
4265 2023-04-01 六 3008 383.240643 NaN ... 1591 649 1363 4 惠州店
4266 2023-04-01 六 3009 5739.039035 NaN ... 1443 901 2294 4 佛山店
4267 2023-04-01 六 3010 9178.243621 NaN ... 1975 663 2122 4 福州店0 False
1 False
2 False...
4265 True
4266 True
4267 True
Name: 门店号, Length: 4268, dtype: boolIndex([ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,...4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266, 4267],dtype='int64', length=1193)
除 contains 外,对于字符列的模糊查询还有 startwith、endwith等方式
筛选方法和函数可以根据不同的需要被搭配在一起形成多重的条件筛选
二、排序
(一)修改列排序
1.df=df['new_column1','new_column2',...]:
这是最简单的方法,直接重新定义列名
print(data2.columns)
l=['日期', '月份', '星期', '门店号', '门店', '天气', '码洋', '实洋', '客流量', '客单数', '交易数量']
df=data2[l]
print(df.columns)Index(['日期', '星期', '门店号', '码洋', '天气', '实洋', '客流量', '客单数', '交易数量', '月份', '门店'], dtype='object')
Index(['日期', '月份', '星期', '门店号', '门店', '天气', '码洋', '实洋', '客流量', '客单数', '交易数量'], dtype='object')
2.df.insert(index, 'column_name', df.pop('column')):
意思是将月份删除,插入第二列
print(data2.columns)
data2.insert(1,'月份',data2.pop('月份'))
print(data2.columns)Index(['日期', '星期', '门店号', '码洋', '天气', '实洋', '客流量', '客单数', '交易数量', '月份', '门店'], dtype='object')
Index(['日期', '月份', '星期', '门店号', '码洋', '天气', '实洋', '客流量', '客单数', '交易数量', '门店'], dtype='object')
3.reindex:
reindex 可以重排列名,但其内容不改变
(二)行的排序
1.索引:df.sort_index(axis=0,ascending=False)
sort_index 可以根据索引排序,索引排序主要对于在如日期、ID等作为索引的情况下使用较为方便
axis:参数指定对行索引排序还是对列索引排序,默认0,表示对行索引排序,1表示对列索引进行排序
ascending:参数指定升序还是降序,默认为True表示升序,设置为False表示降序
df=data2.sort_index(ascending=False)
print(df)日期 星期 门店号 码洋 天气 ... 客流量 客单数 交易数量 月份 门店
4267 2023-04-01 六 3010 9178.243621 NaN ... 1975 663 2122 4 福州店
4266 2023-04-01 六 3009 5739.039035 NaN ... 1443 901 2294 4 佛山店
4265 2023-04-01 六 3008 383.240643 NaN ... 1591 649 1363 4 惠州店
... ... .. ... ... ... ... ... ... ... .. ...
2 2023-01-31 二 1003 9369.565960 NaN ... 1661 949 1258 1 观澜店
1 2023-01-31 二 1002 8117.412956 NaN ... 1392 752 1462 1 石岩店
0 2023-01-31 二 1001 8105.611548 NaN ... 1577 859 2004 1 龙华店
2.值:
(1)df.sort_values(by=[column1,column2],ascending=[False,True],kind):
by:要排序的列
ascending:意为提升,通过该参数可以设置排序是按升序还是降序
kind:排序方式,有 mergesort 归并排序,heapsort 堆排序和quicksort 快速排序等
比如,按日期升序,客流量降序对数据排序并提取,可以使用该方法,会先对 column1进行排序,随后对 column2 进行排序
df=data2.sort_values(by=['日期','客流量'],ascending=[True,False])[['日期','客流量']]
print(df)日期 客流量
1028 2023-01-01 1988
1037 2023-01-01 1980
1041 2023-01-01 1971
... ... ...
3205 2023-04-30 1118
3211 2023-04-30 1084
3193 2023-04-30 1012
如果数据是 str 类型,则是按照字符编码排序。如果数据内容有汉字,则涉及字符的编码和解码,可使用 'x'.ecoding 可以查看对应的编码。
(2)df.rank():
中国式排序,用法详见https://blog.csdn.net/fullbug/article/details/122750105
笔记:DataFrame数据的筛选和排序相关推荐
- 使用Pandas对数据进行筛选和排序
使用Pandas对数据进行筛选和排序 转自:http://bluewhale.cc/2016-08-06/use-pandas-filter-and-sort.html 筛选和排序是Excel中使用频 ...
- SQL --- 数据的筛选与排序
模糊查询 SELECT * FROM 表名 WHERE 列名 like '%字段%'; 例如:查询姓马的同志 SELECT * FROM 表名 WHERE 列名 like '马%'; 例如:查询名为冬 ...
- excel两个表格数据对比_Excel表格技巧—如何进行数据筛选和排序
Excel表格数据的筛选和排序,我们在日常工作中经常用到,这个技巧在对多数据进行规律性查找时尤为重要.因此熟练掌握这个Excel技巧可以让我们的工作事半功倍,那么如何进行数据筛选和排序呢?
- dataframe 按条件筛选行
使用Pandas对数据进行筛选和排序 转自:http://bluewhale.cc/2016-08-06/use-pandas-filter-and-sort.html 筛选和排序是Excel中使用频 ...
- python科学计算笔记(九)pandas中DataFrame数据操作函数
Python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFrame数 ...
- 【pandas】--DataFrame数据筛选(二)
相关篇: DataFrame数据处理(一) dataframe高级用法三 一.数据选取 按索引标签 选取(loc做法) 按索引位置 选取(iloc做法) 1.1选取第1行的数据(选取单行数据) .lo ...
- R语言使用subset函数基于组合逻辑筛选dataframe符合条件的数据行(select observations)、并指定需要保留的dataframe数据列或者字段
R语言使用subset函数基于组合逻辑筛选dataframe符合条件的数据行(select observations).并指定需要保留的dataframe数据列或者字段 目录
- R语言dataframe计算满足筛选条件的行的个数(筛选满足条件的数据行并计数):类似于excel的countif函数
R语言dataframe计算满足筛选条件的行的个数(筛选满足条件的数据行并计数):类似于excel的countif函数 目录
- pandas获取dataframe数据列的数据类型、获取dataframe每类数据类型数据列的个数、使用select_dtypes函数、include参数以及exclude参数按照数据类型筛选数据
pandas获取dataframe数据列的数据类型.获取dataframe每类数据类型数据列的个数.使用select_dtypes函数.include参数以及exclude参数按照数据类型筛选数据 目 ...
最新文章
- iOS VideoToolbox硬编H.265(HEVC)H.264(AVC):1 概述
- 利用redis写webshell
- hdu 4588 Count The Carries 南京邀请赛
- DNS解析原理与Bind部署DNS服务
- skimage exposure模块解读
- 编译安装LAMP环境
- Leetcode 746.使用最小花费爬楼梯
- 贪吃蛇c语言判断没有输入,贪吃蛇问题
- LINUX清理垃圾桶提示“没有权限”或“目录非空”
- 【SSM】手动SQL分页和PageHelper插件分页
- linux gpio管脚功能配置API
- mysql在财务分析中的作用_财务报表分析的作用和目的
- webrtc 快速搭建 视频通话 视频会议
- OpenStack资源整理(转自陈沙克)
- 麒麟座V3.1接入OneNET平台初体验--上传温湿度
- MEMS光学器件— MEMS OXC(光交叉互连开关)
- google黑客常用搜索语句
- 炒菜机器人的弊端_炒菜机器人用不了?那我就来个暴力拆解
- 进程创建-终止-等待-替换
- 数据预处理:分类和顺序变量转化为数值型数据
热门文章
- SKIL/工作流程/执行作业
- qt开关控件设计(手把手从零开始)
- JAVA经验:很有启发(四)
- 怪异盒模型flex布局
- 华大半导体 HC32F4A0 系列开发笔记
- 数据中台-让数据用起来-第一章笔记
- 【Field xx in xxx.xx.xx required a bean of type ‘xx.xx.xx‘ that could not be found】排查和解决办法
- 多节点OpenStack Charms 部署指南0.0.1.dev303--21--控制器备份和还原
- Robot Framework 介绍
- 蓝桥杯scratch集训操作题:绘制蜘蛛网