目录

一、筛选

(一)索引的运用

(二)条件筛选

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数据的筛选和排序相关推荐

  1. 使用Pandas对数据进行筛选和排序

    使用Pandas对数据进行筛选和排序 转自:http://bluewhale.cc/2016-08-06/use-pandas-filter-and-sort.html 筛选和排序是Excel中使用频 ...

  2. SQL --- 数据的筛选与排序

    模糊查询 SELECT * FROM 表名 WHERE 列名 like '%字段%'; 例如:查询姓马的同志 SELECT * FROM 表名 WHERE 列名 like '马%'; 例如:查询名为冬 ...

  3. excel两个表格数据对比_Excel表格技巧—如何进行数据筛选和排序

    Excel表格数据的筛选和排序,我们在日常工作中经常用到,这个技巧在对多数据进行规律性查找时尤为重要.因此熟练掌握这个Excel技巧可以让我们的工作事半功倍,那么如何进行数据筛选和排序呢?

  4. dataframe 按条件筛选行

    使用Pandas对数据进行筛选和排序 转自:http://bluewhale.cc/2016-08-06/use-pandas-filter-and-sort.html 筛选和排序是Excel中使用频 ...

  5. python科学计算笔记(九)pandas中DataFrame数据操作函数

    Python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFrame数 ...

  6. 【pandas】--DataFrame数据筛选(二)

    相关篇: DataFrame数据处理(一) dataframe高级用法三 一.数据选取 按索引标签 选取(loc做法) 按索引位置 选取(iloc做法) 1.1选取第1行的数据(选取单行数据) .lo ...

  7. R语言使用subset函数基于组合逻辑筛选dataframe符合条件的数据行(select observations)、并指定需要保留的dataframe数据列或者字段

    R语言使用subset函数基于组合逻辑筛选dataframe符合条件的数据行(select observations).并指定需要保留的dataframe数据列或者字段 目录

  8. R语言dataframe计算满足筛选条件的行的个数(筛选满足条件的数据行并计数):类似于excel的countif函数

    R语言dataframe计算满足筛选条件的行的个数(筛选满足条件的数据行并计数):类似于excel的countif函数 目录

  9. pandas获取dataframe数据列的数据类型、获取dataframe每类数据类型数据列的个数、使用select_dtypes函数、include参数以及exclude参数按照数据类型筛选数据

    pandas获取dataframe数据列的数据类型.获取dataframe每类数据类型数据列的个数.使用select_dtypes函数.include参数以及exclude参数按照数据类型筛选数据 目 ...

最新文章

  1. iOS VideoToolbox硬编H.265(HEVC)H.264(AVC):1 概述
  2. 利用redis写webshell
  3. hdu 4588 Count The Carries 南京邀请赛
  4. DNS解析原理与Bind部署DNS服务
  5. skimage exposure模块解读
  6. 编译安装LAMP环境
  7. Leetcode 746.使用最小花费爬楼梯
  8. 贪吃蛇c语言判断没有输入,贪吃蛇问题
  9. LINUX清理垃圾桶提示“没有权限”或“目录非空”
  10. 【SSM】手动SQL分页和PageHelper插件分页
  11. linux gpio管脚功能配置API
  12. mysql在财务分析中的作用_财务报表分析的作用和目的
  13. webrtc 快速搭建 视频通话 视频会议
  14. OpenStack资源整理(转自陈沙克)
  15. 麒麟座V3.1接入OneNET平台初体验--上传温湿度
  16. MEMS光学器件— MEMS OXC(光交叉互连开关)
  17. google黑客常用搜索语句
  18. 炒菜机器人的弊端_炒菜机器人用不了?那我就来个暴力拆解
  19. 进程创建-终止-等待-替换
  20. 数据预处理:分类和顺序变量转化为数值型数据

热门文章

  1. SKIL/工作流程/执行作业
  2. qt开关控件设计(手把手从零开始)
  3. JAVA经验:很有启发(四)
  4. 怪异盒模型flex布局
  5. 华大半导体 HC32F4A0 系列开发笔记
  6. 数据中台-让数据用起来-第一章笔记
  7. 【Field xx in xxx.xx.xx required a bean of type ‘xx.xx.xx‘ that could not be found】排查和解决办法
  8. 多节点OpenStack Charms 部署指南0.0.1.dev303--21--控制器备份和还原
  9. Robot Framework 介绍
  10. 蓝桥杯scratch集训操作题:绘制蜘蛛网