文章目录提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
- 前言
- 一、排序函数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链接
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.更多更强大的数据结构支持
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,相当于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
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画画 math243.理解how的left、right、inner、outer的区别 4.如果出现非key的字段重名怎么办
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。



