目录
Pandas引入
import pandas as pd
Pandas中的两个核心功能
Series
1. 索引标签
在合并时,Series可以根据索引标签实现自动对齐
DataFrame
可以理解为由1个或多个Series构成的
实操练习
如何利用pandas读excel
data.info()
#检查各字段类型
如何修改类型
方法①:利用converters键值对(eg:将uid改成str类型)
方法②: 使用astype,将id的属性改为str
data['id']=data['id'].astype(str)
如何将pandas数据导出
导出为excel:
data.to_excel('text_excel.xlsx')
#导入到当前目录,取名为text_excel,记得后缀要加上
导出为csv:
data.to_csv('text_csv.csv',encoding='GB18030')
#以csv的格式将文件导入到当前目录,取名为text_csv,记得后缀要加上
#加入encoding防止乱码
#to_csv一般用的比较少
DataFrame框架访问
取列
1. 取单列。其本质和字典的访问类似(可以将方括号理解为SQL查询中的select)
2. 取多列。则再加一个方括号,再最里面的方括号把要加入的字段写入
data[['id','content','uid']]
取行
核心:iloc
data.iloc[1]
#取第二行数据
data.iloc[1:6][['id','content']]
#返回第二行到第六行数据中的id列,content列值
#若先列后行也可以
data[['id','content']].iloc[1:6]
DataFrame数据的筛选
data[data['progress']>=100000]
#将progress >=100000的值信息都输出
数据去重
drop_duplicates(subset='uid',keep='last',inplace=True)
#subset根据后面的属性进行去重
#keep:对于重复的数据可以选择是保留first,还是保留last
#inplace:若是True,则就会对原表进行修改,反之,只是视图,不改变原表数据
轴/合并/连接
轴
在二维中,可以把axis理解为方向
合并
从上往下拼接:针对行,即axis=0或者axis='index'
具体展示如下:
1. 再次打开一个文件,命名为data2
2. 将data,data2按照水平方向来拼接
concat_demo=pd.concat([data,data2],axis=0)
concat_demo
#将合并后的文件复制给concat_demo
连接
1. 同理,先再读取一个表 user_lecel
2.对user_level的uid属性进行重命名
user_level.rename(columns={'uid':'user_id'},inplace=True)
user_level
3. 利用merge()函数进行连接
pd.merge(concat_demo,user_level,how='inner',left_on='uid',right_on='user_id')
排序与匿名函数
排序
前期数据集准备:
注: True,False不要写错
#将data数据按照uid升序,ctime降序来整理数据
data.sort_values(['uid','ctime'],ascending=[true,False])
#data是这个数据集的名字
#如果想按照多个属性来排序,则借用[]以列表形式展示
#ascending若为True,则表示升序,反之则为降序,若同样[],则与前面的属性一一对应
匿名函数
借助“lambda”关键字,定义一些简单的函数
add2 = lambda x : x + 5
#实现自定义函数add2,x是传入的参数,:后的公式表示对传入参数的处理
add3 = lambda x ,y: x + y
#实现自定义函数add3,x,y是传入的参数,冒号后的公式表示对传入参数的处理
输出结果:
分组,聚合,转换
前期工作准备:准备好相关数据,以“user_level”表为例
分组
level_manager=user_level.groupby('level')
level_manager
#基于pandas的属性,使用group语句后,并不会直接打印输出结果,其返回内容相关于一个管理者
#输出具体分成几组
level_manager.count()
#借助循环遍历打印输出分组的具体内容
for name,df in level_manager:
print(name)
print(df)
展示结果:
聚合
像sum,max,min这些函数
导入相关数据集
product_gp=history.groupby('商品名称')
product_gp[['消耗','GMV']].sum()
#指明在分类后,统计比如消耗,GMV的sum
展示结果:
product_gp[['消耗','GMV']].agg(['max','min'])
#1.想看不同聚合指标时可以用agg,在后面的列表填入指标
product_gp.agg({'消耗':['max','min'],'GMV':'min'})
#2.传入字典作为参数,用于不同字段按照不同的聚合结果,本例中,消耗按照最大最小聚合,GMV按照最小聚合
def diff(x):
return x.max()-x.min()
product_gp[['消耗','GMV']].agg(diff)
#法一:自定义函数聚合计算,两个字段的最大值-最小值
# 法二:借助lambda匿名函数,简化聚合流程
product_gp[['消耗','GMV']].agg(lambda x:x.max()-x.min())
转换
利用transform增加同样的行数
history['GMV总和']=product_gp['GMV'].transform(func='sum')
#在history表中,新增一列"GMV总和",将transform结果赋予该列
history
展示结果:
补充:rank排名
#每个投放日期内,广告计划ID的GMV排名
history['每日GMV排名']=history.groupby('投放日期'['GMV'].rank(method='dense',ascending=False)
history.head(20) #表示打印结果的前20条数据
#‘dense’去除小数后面的位数,‘ascending’按降序排
利用“astype” 将浮点数转换为整数