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

pandas进阶教程

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

pandas进阶教程

目录
  • 进阶操作
    • 复杂查询
      • 逻辑运算
      • 函数筛选
      • 比较函数
      • df.query()查询
      • df.filter()筛选
      • 按数据类型查询
    • 数据类型转换
      • 转换为时间类型
      • 数据排序
      • 添加修改


进阶操作 复杂查询 逻辑运算
df.Q1 > 36
df.index == 1
df.loc[:,'Q1':'Q4'] > 60
#Pandas支持很多逻辑运算,这里不再介绍
函数筛选
# 可以在表达式处使用lambda函数
df.Q1[lambda s: max(s.index)] #查询最大的索引值

lambda 形式参数:函数表达式

比较函数

pandas提供了一些比较函数,使我们可以将逻辑表达式替换为函数形式

df.eq()		#等于
df.ne()		#不等于
df.le()		#小于等于
df.lt()		#小于
df.ge()		#大于等于
df.gt()		#大于
df.query()查询
df.query(expr)		#使用布尔表达式查询df的列
#举例
df.query('Q1>Q2>90')
df.query('Q1+Q2>180')
df.query('Q1==Q2')
df.query('(Q1<50) & (Q2>40) and (Q3>90)')
#支持使用@符号引入变量
a = df.Q1.mean()
df.query('Q1 > @a+40')
df.eval()			#与.query()类似
df.filter()筛选
df.filter()		#行名和列名进行筛选,支持模糊匹配、正则表达式。
例:
df.filter(items=['Q1','Q2'])	#选择两列
df.filter(regex='Q',axis=1)		#列名包含Q的列
df.filter(regex='e$',axis=1)	#以e结尾的列
df.filter(regex='1$',axis=0)	#正则,索引名以1结尾的行
df.filter(like='2',axis=0)		#索引中有2的行
df.filter(regex='^2',axis=0).filter(like='Q',axis=1)
按数据类型查询
df.select_dtypes(include=None, exclude=None)
include: 'float64'  'bool'  'number'
exclude: 同上

数据类型转换
#推断类型
df.infer_objects()	#自动转换合适的数据类型
df.convert_dtypes()	#自动转换,支持str类型
#指定类型
pd.to_XXX()
pd.to_numeric(,downcast='integer')#转为数字,且是int,而非float
	#downcast:integersignedunsignedfloat
pd.to_datatime(,errors='ignore')#转为时间
pd.to_timedelta(,errors='coerce')#转为时间差
pd.to_datatime(df[['year','month','day']])#组合成日期
#类型转换astype()
df.column.astype('int32')
df.astype({'Q1':'int32','Q2':'int32'})
	#当数据的格式不具备转换为目标类型的条件时,需要先对数据进行处理。
	#例如:80%
data.rate.apply(lambda x: x.replace('%','')).astype('float')/100
转换为时间类型

这里我想拿出来单独做笔记,因为我经常被时间类型是比较弄的焦头烂额。

pd.to_datatime()
s.astype('datatime64[ns]')
例:
t = pd.Series(['202000101','20001103'])

以上这些当转换格式挺好用,但如果筛选时间段,我建议还是用str类型,正则表达式比较好用,例如:

#筛选2000年以后的数据
data_20 = data[data.filter(regex='^20',ax=0)]
#正则表达式什么时候用查百度就行
数据排序
#索引排序
df.sort_index()
df.sort_index(ascending=False)		#倒序
df.sort_index(axis=1)				#列索引
df.sort_index(inplace=True)			#改变原数据
df.sort_index(ignore_index=True)	#重新建立索引
df.sort_index(na_position='first')	#空值在前'last'
df.reindex()						#指定自己定义顺序的索引
#数值排序
df.sort_values()
df.sort_values(by= ,ascending= )	#上面的参数也都有效
#按大小值排序
df.nsmallest(5, [])					#按[]中列名排序,显示最小的5行数据
df.nlargest()
添加修改
#替换数据
df.replace(0,5)				#0换5
df.replace([0,1,2],3)		#012换3
df.replace([0,1,2],[3,4,5])	#对应替换
s.replace([1,2],method='bfill')#下一位作为填充
	#method:pad(上下均值)ffillbfill
df.replace({})				#字典对应替换
df.replace({'Q1':1},100)	#将Q1中的值1换为100
df.repalce({'Q1':{1:10,2:20}})#指定Q1列中的值1、2换为10、20
#正则表达式
df.replace(to_replace=r'',value='new',regex=True)
df.replace({'Q1':r''},{'Q1':'new'},regex=True)
df.replace(regex={r'':'new' 'foo':'xyz'})
df.replace(regex=[r'', 'foo'],value='new')
#填充空值


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

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

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