python高级数据分析_8、Python 数据分析-Pandas高级操作
1、替换操作replace()
替换操作可以同步作用于Series和DataFrame中
df = DataFrame(data=np.random.randint(0,20,size=(5,6)))
1.1、单值替换
普通替换: 替换所有符合要求的元素:to_replace=15,value='e'
#将1替换成one
df.replace(to_replace=1,value='one')
按列指定单值替换: to_replace={列标签:替换值} value='value'
df.replace(to_replace={0:1},value='one')
1.2、多值替换
列表替换: to_replace=[] value=[]
df.replace(to_replace=[0],value='one')
字典替换(推荐) to_replace={to_replace:value,to_replace:value}
df.replace(to_replace={0:'zero'})
2、映射操作map()
概念:创建一个映射关系列表,把values元素和一个特定的标签或者字符串绑定(给一个元素值提供不同的表现形式)
创建一个df,两列分别是姓名和薪资,然后给其名字起对应的英文名
dic = {
'name':['张三','李四','张三'],
'salary':[15000,20000,15000]
}
df = DataFrame(data=dic)
映射关系表
dic = {
'张三':'tom',
'李四':'jay'
}
df['e_name'] = df['name'].map(dic)
map是Series的方法,只能被Series调用
2.1、map运算操作
超过3000部分的钱缴纳50%的税,计算每个人的税后薪资
def after_sal(s):
return s - (s-3000)*0.5
df['after_sal'] = df['salary'].map(after_sal)
4、 排序实现的随机抽样take()
df = DataFrame(data=np.random.randint(0,100,size=(100,3)),columns=['A','B','C'])
np.random.permutation(5)
>>>
array([4, 3, 0, 2, 1])
#将原始数据打乱手动indices列
# df.take(indices=[2,0,1],axis=1)
#将原始数据打乱获取前10条
df.take(indices=np.random.permutation(3),axis=1).take(indices=np.random.permutation(100),axis=0)[0:10]
5、数据的分类处理groupby()
数据分类处理的核心:
groupby()函数
groups属性查看分组情况
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.groupby(by='item',axis=0)
>>>
查看分组详情
df.groupby(by='item',axis=0).groups
>>>
{'Apple': Int64Index([0, 5], dtype='int64'),
'Banana': Int64Index([1, 3], dtype='int64'),
'Orange': Int64Index([2, 4], dtype='int64')}
计算每一种水果的平均价格
#方式一:
#df.groupby(by='item').mean()
df.groupby(by='item').mean()['price']
>>>
item
Apple 3.00
Banana 2.75
Orange 3.50
Name: price, dtype: float64
#方式二: 推荐使用
mean_series = df.groupby(by='item')['price'].mean()
>>>
item
Apple 3.00
Banana 2.75
Orange 3.50
Name: price, dtype: float64
将水果的平均价格汇总到源数据
dic = mean_series.to_dict()#装换成字典的格式
df['mean_price'] = df['item'].map(dic)
求出每一种颜色水果的平均重量,然后进行数据汇总
dic = df.groupby(by='color')['weight'].mean().to_dict()
df['mean_weight'] = df['color'].map(dic)
6、高级自定义数据聚合transform()|apply()
使用groupby分组后,也可以使用transform和apply提供自定义函数实现更多的运算
transform():直接汇总数据,进行映射,返回的是分组求和后的原dataframe的数据结构。
apply():进行映射,才能汇总数据,返回的是pandas的对象或者标量。
df.groupby('item')['price'].sum() <==> df.groupby('item')['price'].apply(sum)
transform和apply都会进行运算,在transform或者apply中传入函数即可
transform和apply也可以传入一个lambda表达式
水果的平均价格
def my_mean(s):
sum = 0
for i in s:
sum += i
return sum / len(s)
df.groupby(by='item')['price'].transform(my_mean)
>>>
0 3.00
1 2.75
2 3.50
3 2.75
4 3.50
5 3.00
Name: price, dtype: float64
每一种水果的平均价格
def my_mean(s):
sum = 0
for i in s:
sum += i
return sum / len(s)
df.groupby(by='item')['price'].apply(my_mean)
>>>
item
Apple 3.00
Banana 2.75
Orange 3.50
Name: price, dtype: float64
7、数据加载保存-数据库sqlite3
1、读取type-.txt文件数据
df = pd.read_csv('./data/type-.txt')
#查看维度
df.shape
>>>
(2, 1)
将文件中每一个词作为元素存放在DataFrame中
df = pd.read_csv('./data/type-.txt',sep='-',header=None)
df.shape
>>>
(3,3)
2、读取数据库中的数据
#连接数据库,获取连接对象
import sqlite3 as sqlite3
conn = sqlite3.connect('./data/weather_2012.sqlite')
#读取库表中的数据值
sql_df=pd.read_sql('select * from weather_2012',conn)
#将一个df中的数据值写入存储到db
df.to_sql('bbb',conn)
读取这个账
pd.read_sql('select * from bbb',conn)
8、透视表pivot_table()
透视表是一种可以对数据动态排布并且分类汇总的表格格式。或许大多数人都在Excel使用过数据透视表,也体会到它的强大功能,而在pandas中它被称作pivot_table。
透视表是一种进行分组统计的函数
透视表的优点:
灵活性高,可以随意定制你的分析计算要求
脉络清晰易于理解数据
操作性强,报表神器
import pandas as pd
import numpy as np
df = pd.read_csv('./data/透视表-篮球赛.csv',encoding='utf8')
pivot_table有四个最重要的参数index、values、columns、aggfunc
index参数:分类汇总的分类条件
每个pivot_table必须拥有一个index。如果想查看哈登对阵每个队伍的得分则需要对每一个队进行分类并计算其各类得分的平均值:
想看看哈登对阵同一对手在不同主客场下的数据,分类条件为对手和主客场
df.pivot_table(index=['对手','主客场'])
values参数:需要对计算的数据进行筛选,
如果我们只需要哈登在主客场和不同胜负情况下的得分、篮板与助攻三项数据:
df.pivot_table(index=['主客场','胜负'],values=['得分','篮板','助攻'])
Aggfunc参数:设置我们对数据聚合时进行的函数操作
未设置aggfunc时,它默认aggfunc='mean'计算均值。
获得james harden在主客场和不同胜负情况下的总得分、总篮板、总助攻时:
方式一:
df.pivot_table(index=['主客场','胜负'],values=['得分','篮板','助攻'],aggfunc='sum')
方式二:
df.pivot_table(index=['主客场','胜负'],aggfunc={'得分':'sum','篮板':'sum','助攻':'sum'})
Columns参数:可以设置列层次字段
对values字段进行分类
获取所有队主客场的总得分
df.pivot_table(index='主客场',values='得分',aggfunc='sum')
获取每个队主客场的总得分(在总得分的基础上又进行了对手的分类)
df.pivot_table(index='主客场',values='得分',aggfunc='sum',columns='对手',fill_value=0)
#fill_value空值填充为0
9、交叉表crosstab()
交叉表是特殊的透视表,统计分组频率时更方便
是一种用于计算分组的特殊透视图,对数据进行汇总,
pd.crosstab(index,colums)
index::要在行中分组的值
columns:要在列中分组的值
values:根据因子聚合的值数组,需指定aggfunc
aggfunc:如指定,还需指定value
normalize:将所有值除以值的总和进行归一化 ,为True时候显示百分比
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]})
求出各个性别抽烟的人数
pd.crosstab(df.smoke,df.sex)
求出各个年龄段抽烟人情况
pd.crosstab(df.age,df.smoke)
10、apply与applymap区别
apply传递的是以series为基本单位,作用于行或列;
applymap传递的是以dataframe为基本单位,作用于每一个元素;
df = DataFrame(data=np.random.randint(0,100,size=(8,6)))
def my_func(s):
#参数s:df中的某一列
return s.mean()
df.apply(my_func,axis=0) #使用my_func处理df中每一列的数据
>>>
0 56.750
1 37.250
2 70.250
3 43.500
4 61.875
5 45.750
dtype: float64
def my_func1(s):
#参数s表示df中的每一个元素
return s+10 #对每一个元素进行+10操作
df.applymap(my_func1) #applymap就可以对df中的每一个元素进行操作
python高级数据分析_8、Python 数据分析-Pandas高级操作相关推荐
- 数据分析:numpy和pandas基础操作详解
数据处理基础 numpy基础 1.numpy创建数组及基础属性 2.数组的特点 3.创建常见数组 4.数组数据类型 5.生成随机数 6.一维数组索引 7.布尔索引 8. 多维数组的索引 9.实际问题 ...
- 3 Python数据分析 美国各州人口分析案例 Pandas高级操作 美国大选献金案例 matplotlib
Python数据分析 1 案例 美国各州人口分析 1.1 数据介绍 数据来源:https://github.com/jakevdp/data-USstates/ 1.1.1 州人口数量表 state- ...
- 网易微专业python数据分析统计服_40套大数据云计算高级实战精品,数据分析,数据仓库,数据爬虫,项目实战,用户画像, ......
40套大数据云计算高级实战精品,数据分析,数据仓库,数据爬虫,项目实战,用户画像,日志分析,Hadoop,Flink,Spark,Kafka,Storm,Docker,ElaticStack等视频教程 ...
- 最全Python培训课程,基础班+高级就业班+课件(数据分析、深度学习、爬虫、人工智能等) 精品课程
最新版Python全套培训课程视频,绝对零基础到Python大牛.包括:零基础得python基础班, 高阶进阶就业篇完整版(含:数据分析.机器学习.网络爬虫.数据挖掘.深度学习.人工智能等)课程共10 ...
- [Python从零到壹] 十一.数据分析之Numpy、Pandas、Matplotlib和Sklearn入门知识万字详解(1)
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- python数据建模工具_python数据分析工具——Pandas、StatsModels、Scikit-Learn
Pandas Pandas是 Python下最强大的数据分析和探索工具.它包含高级的数据结构和精巧的工具,使得在 Python中处理数据非常快速和简单. Pandas构建在 Numpy之上,它使得以 ...
- Python中的数据可视化工具与方法——常用的数据分析包numpy、pandas、statistics的理解实现和可视化工具matplotlib的使用
Python中的数据可视化工具与方法 本文主要总结了: 1.本人在初学python时对常用的数据分析包numpy.pandas.statistics的学习理解以及简单的实例实现 2.可视化工具matp ...
- Pandas高级数据分析快速入门之三——数据挖掘与统计分析篇
Pandas高级数据分析快速入门之一--Python开发环境篇 Pandas高级数据分析快速入门之二--基础篇 Pandas高级数据分析快速入门之三--数据挖掘与统计分析篇 Pandas高级数据分析快 ...
- python做数据分析的包_用Python做数据分析,Numpy,Pandas,matp
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 用Python做数据分析,Numpy,Pandas,matplotlib是怎么也绕不开的三个包,我最开始学习pandas是看的<利用Python进行 ...
- python花萼长度表_Python 数据分析答疑 5:Pandas入门
8.23 第五课 Pandas入门作业 1: 使用如下代码创建 DataFrame, gdp = {"country":["United States", &q ...
最新文章
- SQL连接:where子句与on子句
- python计算出nan_python如何进行汇总统计?
- Python TimedRotatingFileHandler 多进程环境下的问题和解决方法
- hadoop学习;datajoin;chain签名;combine()
- android 入门-Android Permission denied(不允许连接Socket) 错误
- ubuntu下配置eclipse环境
- C++ 函数映射使用讲解
- java高级必须懂得_反射---Java高级开发必须懂的
- Redhat 设置cntlm代理步骤
- 指定精确度(*号的使用)
- tcpdump 抓包
- Source insight 添加注释插件
- 多个漏洞可导致施耐德电气继电器遭重启或设备遭接管
- 小型公司 --- OSPF 不连续区域进行通信配置
- FreeSpan 和 PrefixSpan 算法学习
- SRM 403(1-250pt, 1-500pt)
- java 上传文件编码_java文件传输之文件编码和File类的使用
- mysql nutch_nutch2.2+mysql部署
- Maccms8.x 命令执行漏洞分析
- python实战项目词云生成器(wordcloud+jieba+pyinstaller打包)——词云生成软件【Pyinstaller打包问题解决】
热门文章
- jQuery 稳定、快速的CDN加速服务引用地址
- 操作系统基本功能(操作系统)
- Perfetto工具集之traced_perf
- SaaS:云计算创业创新趋势
- FPGA知识积累【3】
- 应用在PDA触摸屏中的触摸芯片
- 用 Appium 自动收取蚂蚁森林能量
- 12 Steps to Better Code【改善代码的12步】
- 在华为手机上玩OPPO游戏
- @Scheduled(cron = “* * * * * *“) 注解 cron 表达式使用