Python数据分析笔记②

目录

Pandas引入

Pandas中的两个核心功能

Series

DataFrame

实操练习

如何利用pandas读excel

如何修改类型

如何将pandas数据导出

 DataFrame框架访问

取列

取行

DataFrame数据的筛选

​编辑

数据去重 

轴/合并/连接

合并

 连接

排序与匿名函数

排序

​编辑匿名函数

分组,聚合,转换 

分组

聚合

转换


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” 将浮点数转换为整数

  • 27
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值