栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pandas相关函数sort

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pandas相关函数sort

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
  • 前言
  • 一、排序函数sort_values()
  • 二、字符串处理
    • 1.介绍
    • 2.代码介绍
  • 三、pandas索引index
    • 1.介绍
    • 2.代码介绍
  • 四、pandas的merge()
    • 1.merge的语法
    • 2.理解merge的一对一、一对多、多对多的数量对齐关系
    • 3.理解how的left、right、inner、outer的区别
    • 4.如果出现非key的字段重名怎么办
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:
1、pandas排序函数sort_values()
2、pandas字符串处理
3、index
4、merge


提示:以下是本篇文章正文内容,下面案例可供参考

一、排序函数sort_values()

pandas数据排序sort_values()
1、series的排序:serie.sort_value(ascending=True,inplace=Flase)
参数:ascending:默认为true升序排列,false降序排列;inplace:是否修改原始series
2、dataframe:dataframe.sort_values(by,ascending=True,inplace=False)
参数说明:by:指定排序的列或多列,是一个字符串或list;ascebding同上,inplace同上

#单列降序排列
df.sort_values(by="最高温度",ascending=False)
#多列降序排列
df.sort_values(by=["最高温度","温差"],ascending=False)
#多列分别指定降序升序
df.sort_values(by=["最高温度","温差"],ascending=[True,False])
二、字符串处理 1.介绍

a。使用方法:先获取series的str属性,然后在属性上调用函数
b。只能在字符串列上使用,不能在数字列上使用
c。dataframe上没有str属性和处理方法
d。series.str并不是python上原生字符串,而是自己的一套方法,不过大部分和原生str很相似
e。pandas的字符串方法列表参考文档:https://pandas.pydata.org/pandas-docs/stable/reference/series.html#string-handling链接

2.代码介绍

1、获取series的str属性,然后使用各种字符串处理函数
2、使用str 的startswith、contains等bool类series可以做条件查询
3、需要多次str处理的链式操作
4、使用正则表达式处理

代码如下(示例):

#获取列的数据类型
df.dtypes
#字符串替换函数
df["最高温度"].str.replace("℃","")
#判断是不是数字
df["最高温度"].str.isnumeric()
#查看字符串长度
df["最高温度"].str.len()

2、使用str 的startswith、contains等bool类series可以做条件查询

#下一步操作出来的结果是一个bool列
condition=df["日期"].str.startswith("2018-03")
#下一步出来的才是筛选列
df[condition]


3、需要多次str处理的链式操作
先将日期中018-03-02替换成20180302,再提取月份字符串201803

df["日期"].str.replace("-","").str.slice(0,6)
#以下也行
df["日期"].str.replace("-","").str[0:6]

4、使用正则表达式处理

def get_nianyueri(x):
    year,month,day=x["日期"].split("-")
    return f"{year}年{month}月{day}日"
df["中文日期"]=df.apply(get_nianyueri,axis=1)
df.head()
#去除年月日
df["中文日期"].str.replace("年","").str.replace("月","").str.replace("日","")
#正则表达式去除
df["中文日期"].str.replace("[年月日]","")
三、pandas索引index 1.介绍

index的用途:
1.更方便的数据查询;
2.使用index可以获得性能提升;
3.自动的数据对齐功能;
4.更多更强大的数据结构支持

2.代码介绍

1、使用index查询数据
代码如下(示例):

#drop==false,让索引列还保持在column,将乡镇列设为索引,并且让索引列保存到原表中
df.set_index("乡(镇)",inplace=True,drop=False)
df.index
#使用index的查询方法
df.loc['蒙泉镇'].head()
#使用column的condition查询方法
df.loc[df["乡(镇)"]=='蒙泉镇'].head(3)

2、使用index会提升查询性能
如果index是唯一的,pandas会使用哈希表优化,查询性能为O(1)
如果index不是唯一的,但是有序的,pandas会使用二分查找算法,查询性能为O(logn)
如果index是完全随机的,那么每次查询都要扫描全表,查询性能是O(n)

#查询索引是否递增
df.index.is_monotonic_increaseing
#查询索引是否唯一
df.index.is_unique

3.自动的数据对齐功能;

import pandas as pd
s1=pd.Series([1,2,3],index=list("abc"))
s1
s2=pd.Series([2,3,4],index=list("bcd"))
s2
s1+s2



4.index有更多更强大的数据结构支持;
很多强大的索引数据结构
a。CategoricalIndex,基于分类数据的index,提升性能;
b。MultiIndex,多维索引,用于groupby多维聚合后结果等;
C。DatetimeIndex,时间类型索引,强大的日期和时间的方法支持

四、pandas的merge()

pandas的merge,相当于sql的join,将不同的表按key关联到一个表

1.merge的语法

pd.merge(left,right,how=‘inner’,on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=Ture,suffixes=(‘_x’,‘_y’),copy=Ture,indicator=False,volidate=None)
*left、right:要merge的dataframe或者有name的series
*how:join类型,有left、right、outer、inner
*on:join的key、left和right都需要有这个key
*left_on:left的df或者series的key
*right_on: right的df或者series的key
*left_index,right_index:使用index而不是普通的column做on
*suffixes:两个元素的后缀,如果列有重名,自动添加后缀,默认是_x _y

2.理解merge的一对一、一对多、多对多的数量对齐关系

1、一对一:关联的key都是唯一的

left=pd.DataFrame({'sno':[1,2,3,4],'name':['aaa','bbb','c','d']})
left
right=pd.DataFrame({'sno':[1,2,3,4],'age':['21','22','23','24']})
right
#一对一关系,结果中有四条
pd.merge(left,right,on='sno')

运行结果

   sno	name
0	1	aaa
1	2	bbb
2	3	c
3	4	d
   sno	age
0	1	21
1	2	22
2	3	23
3	4	24
   sno	name age
0	1	aaa	21
1	2	bbb	22
2	3	c	23
3	4	d	24

2、一对多:左边的表key唯一,右边不唯一

import pandas as pd
left=pd.DataFrame({'sno':[1,2,3,4],'name':['aaa','bbb','c','d']})
left
right=pd.DataFrame({'sno':[1,1,3,3,4],'grade':['math80','english91','chinese99','math24','english64']})
right
#有5行
pd.merge(left,right,on='sno')
   sno	name
0	1	aaa
1	2	bbb
2	3	c
3	4	d
	sno	grade
0	1	math80
1	1	english91
2	3	chinese99
3	3	math24
4	4	english64
	sno	name	grade
0	1	aaa	math80
1	1	aaa	english91
2	3	c	chinese99
3	3	c	math24
4	4	d	english64

3、多对多:左边、右边不唯一
结果会出现左边的行数*右边的行数

import pandas as pd
left=pd.DataFrame({'sno':[1,1,3,3],'爱好':['画画','篮球','c足球','d画画']})
left
right=pd.DataFrame({'sno':[1,1,3,3,4],'grade':['math80','english91','chinese99','math24','english64']})
right
pd.merge(left,right,on='sno')
 	sno	爱好
0	1	画画
1	1	篮球
2	3	c足球
3	3	d画画
	sno	grade
0	1	math80
1	1	english91
2	3	chinese99
3	3	math24
4	4	english64
   sno	爱好	grade
0	1	画画	math80
1	1	画画	english91
2	1	篮球	math80
3	1	篮球	english91
4	3	c足球	chinese99
5	3	c足球	math24
6	3	d画画	chinese99
7	3	d画画	math24
3.理解how的left、right、inner、outer的区别

4.如果出现非key的字段重名怎么办
总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/864859.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号