数据分析05 /pandas的高级操作
数据分析05 /pandas的高级操作
1. 替换操作
替换操作可以同步作用于Series和DataFrame中
创建df表格数据:
import numpy as np
import pandas as pd
from pandas import DataFrame,Series df = DataFrame(data=np.random.randint(0,100,size=(8,7)))
普通替换: 替换所有符合要求的元素:to_replace=15,value='e'
df.replace(to_replace=0,value='zero')
按列指定单值替换: to_replace={列标签:替换值} value='value'
df.replace(to_replace={0:'aaa',22:222666})
指定行替换
df.iloc[2] = [0,0,0,0,0,0,0]
df
指定列替换
df.replace(to_replace={4:0},value=666) # 将第4列中的0替换成666
2. 映射操作
概念:map是Series的一个方法,创建一个映射关系列表,把values元素和一个特定的标签或者字符串绑定(给一个元素值提供不同的表现形式)
需求:创建一个df,两列分别是姓名和薪资,然后给其名字起对应的英文名
1.创建一个df表格:
dic = {
'name':['张三','李四','王老五'],
'salary':[22222,7777,11111]
}
df = DataFrame(data=dic)
df
2.创建映射表:
# 映射关系表
dic = {
'张三':'tom',
'李四':'jay',
'王老五':'jerry'
}
df['e_name'] = df['name'].map(dic)
df
3. 运算工具
map:map括号中放的是函数就是充当运算工具来使用
示例:超过3000部分的钱缴纳50%的税,计算每个人的税后薪资
def after_sal(s): # 返回税后薪资,参数s就是税前薪资
return s - (s-3000)*0.5 df['after_sal'] = df['salary'].map(after_sal)
df
apply:apply是df的一个方法/运算工具,可以将df中行或者列数据进行某种形式的运算操作。
def func(s):
s = s.sum()
print(s)
df.apply(func,axis=0) # 结果:
张三李四王老五
41110
tomjayjerry
25055.0
4. 映射索引 / 更改之前索引
使用rename()函数替换行索引
参数介绍:index 替换行索引,columns 替换列索引
1.创建df4表格
df4 = DataFrame({'color':['white','gray','purple','blue','green'],'value':np.random.randint(10,size = 5)})
df4
2.映射行/列索引
# 映射关系表:映射行索引
new_index = {0:'first',1:'two',2:'three',3:'four',4:'five'}
# 映射关系表:映射列索引
new_col={'color':'cc','value':'vv'} df4.rename(new_index,columns=new_col)
5. 排序实现的随机抽样/打乱表格数据
np.random.permutation():指定数内随机排序
np.random.permutation(10) # 结果:
array([8, 2, 6, 7, 3, 9, 1, 5, 0, 4])
take():将df数据的行/列进行打乱操作
df = DataFrame(data=np.random.randint(0,100,size=(100,3)),columns=['A','B',"C"])
df.take(np.random.permutation(3),axis=1).take(np.random.permutation(100),axis=0)[:50]
6. 数据的分类处理 / 分组
数据分类处理的核心:groupby()函数,groups属性查看分组情况
1.创建表格
df = DataFrame({'item':['Apple','Banana','Orange','Banana','Orange','Apple'],
'price':[4,3,3,2.5,4,2],
'color':['red','yellow','yellow','green','green','green'],
'weight':[12,20,50,30,20,44]})
df
示例1:计算每种水果的平均价格
# 分组
df.groupby(by='item')
# 结果:<pandas.core.groupby.DataFrameGroupBy object at 0x000001B6E3D4A0B8> # 查看分组情况
df.groupby(by='item').groups
# 结果:
{'Apple': Int64Index([0, 5], dtype='int64'),
'Banana': Int64Index([1, 3], dtype='int64'),
'Orange': Int64Index([2, 4], dtype='int64')} # 请平均价格
df.groupby(by='item').mean()['price'] # 不推荐
df.groupby(by='item')['price'].mean() # 推荐
示例2:计算每种颜色水果的平均重量
df.groupby(by='color')['weight'].mean()
示例3:将每种水果的平均价格数据汇总到原数据中,通过映射实现
# 求每种水果的平均价格
mean_price_series = df.groupby(by='item')['price'].mean() # 将mean_price_series转换成字典,mean_price_series是Series类型
dic = mean_price_series.to_dict() # 建立item和平均价格的映射关系,并在表中创建mean_price列
df['mean_price'] = df['item'].map(dic)
7. 高级数据聚合
使用groupby分组后,也可以使用transform和apply提供自定义函数实现更多的运算
示例:
df.groupby('item')['price'].sum() <==> df.groupby('item')['price'].apply(sum)
transform和apply都会进行运算,在transform或者apply中传入函数即可,transform和apply也可以传入一个lambda表达式
transform应用示例1:
# 错误示例:
def abc(s):
return s
df.groupby(by='item')['price'].abc() # abc不是Series对象的方法 # 正确使用:
df.groupby(by='item')['price'].transform(abc) #通过transform可以实现
transform应用示例2:自定义一个求均值的函数,作用到分组结果中
def my_mean(s):
sum = 0
for i in s:
sum+=i
return sum/s.size
df.groupby(by='item')['price'].transform(my_mean)
apply应用实例:自定义一个求均值的函数,为了防止混淆,可以忽略此方法
def my_mean(s):
sum = 0
for i in s:
sum+=i
return sum/s.size
df.groupby(by='item')['price'].apply(my_mean)
8. 数据加载
读取type-.txt文件数据
import pandas as pd
from pandas import DataFrame,Series
data=pd.read_csv('./data/type-.txt') # data/type-.txt文件数据:
"""
你好-我好-他也好
也许-大概-有可能
然而-未必-不见得
"""
将文件中每一个词作为元素存放在DataFrame中
data=pd.read_csv('./data/type-.txt',sep='-',header=None) # sep:通过sep指定的符号切割
# header=None,不以数据的第一行作为列的索引
读取数据库中的数据
# 连接数据库,获取连接对象
import sqlite3 as sqlite3
conn=sqlite3.connect('./data/weather_2012.sqlite') # 读取库表中的数据值
sql_df=pd.read_sql('select * from weather_2012',conn)
sql_df # 将一个df中的数据值写入存储到db
df.to_sql('fruit',conn) # 此方法不适用mysql数据库的写入
9. 透视表
透视表概述:
透视表是一种可以对数据动态排布并且分类汇总的表格格式。或许大多数人都在Excel使用过数据透视表,也体会到它的强大功能,而在pandas中它被称作pivot_table。
透视表的优点:
- 灵活性高,可以随意定制你的分析计算要求
- 脉络清晰易于理解数据
- 操作性强,报表神器
透视表的参数:
pivot_table有四个最重要的参数index、values、columns、aggfunc
index参数:分类汇总的分类条件
values参数:需要对计算的数据进行筛选
Aggfunc参数:设置我们对数据聚合时进行的函数操作,当我们未设置aggfunc参数:默认aggfunc='mean'计算均值
Columns参数:可以设置列层次字段,对values字段进行分类
示例:分析NBA球星的比赛数据
将数据读取出来
import pandas as pd
import numpy as np
df = pd.read_csv('./data/basketball_game.csv')
df.head()
1.查看Harden对阵过球队的比赛数据
df.pivot_table(index='对手') # 默认分类汇总使用的聚合函数是mean
2.对阵同一对手在不同主客场下的数据,分类条件为对手和主客场
df.pivot_table(index=['对手','主客场'])
3.只需要Harden在主客场和不同胜负情况下的得分、篮板与助攻三项数据
df.pivot_table(index=['主客场','胜负'],values=['得分','篮板','助攻']) # values参数的使用
4.获取Harden在主客场和不同胜负情况下的总得分、总篮板、总助攻数
df.pivot_table(index=['主客场','胜负'],values=['得分','篮板','助攻'],aggfunc='sum') # aggfunc参数的使用
5.获取Harden在主客场和不同胜负情况下的平均得分、总篮板、最小助攻数
df.pivot_table(index=['主客场','胜负'],aggfunc={'得分':'mean','篮板':'sum','助攻':'min'})
6.获取所有队主客场的总得分
df.pivot_table(index='主客场',values='得分',aggfunc='sum')
7.获取每个队主客场的总得分(在总得分的基础上又进行了对手的分类)
df.pivot_table(index='主客场',values='得分',aggfunc='sum',columns='对手').fillna(value=0) # Columns参数的使用
10. 交叉表
交叉表概述:是一种用于计算分组的特殊透视图,对数据进行汇总,pd.crosstab(index,colums)
交叉表pd.crosstab(index,colums)的参数:
index参数:分组数据,交叉表的行索引
columns参数:交叉表的列索引
交叉表应用示例:
1.创建表
df = DataFrame({'sex':['man','man','women','women','man','women','man','women','women'],
'age':[15,23,25,17,35,57,24,31,22],
'smoke':[True,False,False,True,True,False,False,True,False],
'height':[168,179,181,166,173,178,188,190,160]})
df
2.求出不同性别抽烟的人数
pd.crosstab(df.smoke,df.sex)
3.求出各个年龄段抽烟人情况
pd.crosstab(df.age,df.smoke)
数据分析05 /pandas的高级操作的更多相关文章
- Pandas的高级操作
pandas数据处理 1. 删除重复元素 使用duplicated()函数检测重复的行,返回元素为布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True keep参数: ...
- 利用Python进行数据分析(15) pandas基础: 字符串操作
字符串对象方法 split()方法拆分字符串: strip()方法去掉空白符和换行符: split()结合strip()使用: "+"符号可以将多个字符串连接起来: join( ...
- Python数据分析之pandas学习(基础操作)
一.pandas数据结构介绍 在pandas中有两类非常重要的数据结构,即序列Series和数据框DataFrame.Series类似于numpy中的一维数组,除了通吃一维数组可用的函数或方法,而且其 ...
- 数据分析06 /pandas高级操作相关案例:人口案例分析、2012美国大选献金项目数据分析
数据分析06 /pandas高级操作相关案例:人口案例分析.2012美国大选献金项目数据分析 目录 数据分析06 /pandas高级操作相关案例:人口案例分析.2012美国大选献金项目数据分析 1. ...
- pandas高级操作
pandas高级操作 import numpy as np import pandas as pd from pandas import DataFrame,Series 替换操作 替换操作可以同步作 ...
- 数据分析之Pandas操作
Pandas pandas需要导入 import pandas as pd from pandas import Series,DataFrame import numpy as np 1 Serie ...
- 数据分析之Pandas
一.Pandas介绍 1.介绍 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具. ...
- 一句Python,一句R︱pandas模块——高级版data.frame
先学了R,最近刚刚上手python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句python,对应写一句R. pandas可谓如雷贯耳,数据处理神器. 以下符号: = ...
- 数据分析工具Pandas
参考学习资料:http://pandas.pydata.org 1.什么是Pandas? Pandas的名称来自于面板数据(panel data)和Python数据分析(data analys ...
随机推荐
- cnpm的安装(超级详细版)
1. 安装node 打开黑窗口 安装node 网上教程很多,我就不加上了 2.node -v 查看node是否已安装 3.安装淘宝镜像 npm install -g cnpm -registry ...
- Flume-1.4.0和Hbase-0.96.0整合
在使用Flume的时候,请确保你电脑里面已经搭建好Hadoop.Hbase.Zookeeper以及Flume.本文将以最新版的Hadoop-2.2.0.Hbase-0.96.0.Zookeeper-3 ...
- sourcetree 安装破解注册方法
1.下载sourcetree安装包 2.点击安装到下图步骤 3.在网盘中下载accounts.json 文件,( 链接:https://pan.baidu.com/s/1tJd_xCh-B-oOwd ...
- git 提交流程
Git提交流程: 1. Menu remote > (拉取)fetch 2. 重新扫描(rescan) 3. 缓存改动(stage change) 4. 写注释后提交(commit) 5. Me ...
- 腾讯云Redis混合存储版重磅推出,万字长文助你破解缓存难题!
导语 | 缓存+存储的系统架构是目前常见的系统架构,缓存层负责加速访问,存储层负责存储数据.这样的架构需要业务层或者是中间件去实现缓存和存储的双写.冷热数据的交换,同时还面临着缓存失效.缓存刷脏.数据 ...
- Linux性能优化思路
性能测试的核心,就是找出性能瓶颈并进行性能优化,解决"慢"的问题,最终满足客户业务需求. [性能需求来源及性能问题现象] 性能需求的来源,主要分为以下几类: 项目组提出性能需求: ...
- jmeter关联的五种方式
[脚本准备] 这里,我们用dummy取样器来模拟服务器的返回,通过关联获取name的值,然后接口取这个name的值,这就我们就简单模拟了请求间的依赖关系 在取样器中添加dummy取样器 搜索的关键字是 ...
- Python分支结构与流程控制
Python分支结构与流程控制 分支结构 if 语句 分支结构在任何编程语言中都是至关重要的一环,它最主要的目的是让计算机拥有像人一样的思想,能在不同的情况下做出不同的应对方案,所以if语句不管是在什 ...
- MongoDB快速入门教程 (3.2)
3.2.索引 索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,建立索引,通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条 ...
- 基于AOP和ThreadLocal实现日志记录
基于AOP和ThreadLocal实现的一个日志记录的例子 主要功能实现 : 在API每次被请求时,可以在整个方法调用链路中记录一条唯一的API请求日志,可以记录请求中绝大部分关键内容.并且可以自定义 ...