Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >我的Python分析成长之路9

我的Python分析成长之路9

作者头像
py3study
发布于 2020-02-10 15:02:34
发布于 2020-02-10 15:02:34
2.4K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

pandas入门

统计分析是数据分析的重要组成部分,它几乎贯穿整个数据分析的流程。运用统计方法,将定量与定性结合,进行的研究活动叫做统计分析。而pandas是统计分析的重要库。

1.pandas数据结构

    在pandas中,有两个常用的数据结构:Series和Dataframe  为大多数应用提供了一个有效、易用的基础。

    1.Series:Series是一种一维的数组型对象,它包含一个值序列,并含有数据标签。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 import pandas as pd
 2 ser1 = pd.Series([1,2,3,4])
 3 print(ser1)
 4 print(ser1.index)  #ser1的索引
 5 print(ser1.values)  #ser1的值
 6 ser2= pd.Series([1,2,3,4],index=['a','b','c','d'])  #自己设置索引
 7 print(ser2['a'])  #获得索引为a的值
 8 print(ser2[['a','b','c']])#获取多个索引值\
 9 #Series对象自身和其索引都有name属性,
10 ser2.name ="p"
11 ser2.index.name = 'state'
12 print(ser2)

View Code

2.DataFrame:表示的是矩阵的数据表,它包含已排序的列集合,每一个可以是不同的值类型(数值、字符串、布尔值)。DataFrame既有行索引又有列索引。最常用的就是利用包含等长度的列表或numpy数据的字典来形成DataFrame

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 import pandas as pd
 2 import numpy as np
 3 data ={'state':['a','a','a','b','b','b'],
 4        "year":[2000,2001,2002,2001,2002,2003],
 5        "pop":[1.5,1.7,3.6,2.4,2.9,3.2]}
 6 df1 = pd.DataFrame(data)
 7 print(df1)
 8 df2 = pd.DataFrame(data,columns=['year','state','pop'],index=["one","two","three","four","five","six"]) #自己设置列名
 9 print(df2.columns)
10 print(df2['year'])  #获取year列值
11 print(df2.year)
12 print(df2.loc["one"])  #获取one行值
13 df2['debt'] = np.arange(6)
14 print(df2)

View Code

3.使用loc和iloc选择数据

      loc方法是针对DataFrame索引名称的切片方法,如果传入的不是索引名称,那么切片操作无法执行。利用loc方法,能够实现所有单层索引切片操作。

      loc使用方法:DataFrame.loc[行索引名称或条件,列索引名称,如果内部传递的是一个区间,则左闭右开。loc内部可以出入表达式,返回布尔值的series

      iloc和loc的区别是,iloc接受的必须是行索引和列索引的位置。iloc方法的使用,DataFrame.ilo[行索引位置,列索引位置],传递是区间,左闭右闭

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 import pandas as pd
 2 import numpy as np
 3 data ={'state':['a','a','a','b','b','b'],
 4        "year":[2000,2001,2002,2001,2002,2003],
 5        "pop":[1.5,1.7,3.6,2.4,2.9,3.2]}
 6 df2 = pd.DataFrame(data,columns=['year','state','pop'],
 7                    index=["one","two","three","four","five","six"])
 8 print(df2['year'])   #从DataFrame中选择单列或列序列
 9 print(df2.loc["one"])  #从DataFrame中选择单行或多行
10 print(df2.loc[:,"year"])  #从DataFrame中选择单列
11 print(df2.loc["one","year"])   #同时确定行和列
12 print(df2.loc["one",['year','state']]) #一行两列
13 print(df2.loc["condition",[]])  #loc 可以接受表达式
14 print(df2.iloc[1])  #选取单行
15 print(df2.iloc[:,[2,3]])  #选取索引为第2,316 # print(df2.ilov[where_i,where_j][condition])
17 df2.iloc[condition,[]].values  #iloc方法不能接受表达式,条件返回的是一个Series,取出Series的值

View Code

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 import numpy as np
2 import pandas as pd
3 df4 = pd.DataFrame(np.arange(8).reshape(2,4),index=["three","one"],columns=["d","a","b","c"])
4 print(df4.sort_index(axis=1,ascending=False)) #反序
5 print(df4.sort_values(by='b')) #根据b列数值排序
6 print(df4.sort_values(by=['a','b']))
7 df5 = pd.Series([7,-5,7,4,2,0,4])
8 print(df5.rank())
9 print(df5.rank(method='first')) #按照值在数据中出现的次序分配排名

4.删除某列或某行的数据

      DataFrame.drop(label,axis=0,level=None,inplace=False)

      label:表示要删除的数据。axis:表示要操作的轴,inplace:表示操作是否对原数据生效

2.描述性统计分析

    描述性统计是用来概括、表述事物的整体状况,以及事物间关联、类属关系的统计方法。通过几个统计值可简捷地表达地表示一组数据的集中趋势和离散程度。

    1.数值型特征的描述性统计

    数值型特征的描述性统计主要包括了计算数值型数据的完整情况、最小值、均值、中位数、最大值、四分位数、极差、标准差、方差、协方差和变异系数。

    min:最小值

    max:最大值

    mean:平均值

    ptp:极差

    median:中位数

    std:标准差

    var:方差

    cov:协方差

    corr:相关性

    mod:众数

    skew:样本偏度

    kurt:样本峰度

    quantile:四分位数

    count:非空值数目

    mad:平均绝对离差

    describe:计算Series或DataFrame各列的汇总统计集合

    pct_change:计算百分比

    2.类别型数据的描述性统计

    描述类别型特征的分布状况,可以使用频数统计表

    value_count:返回一个Series,索引是唯一值序列,值是计数个数,按照个数降序排序

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1  1 import pandas_datareader.data as web
 2  2 tickers =['AAPL',"IBM","GOOG"]
 3  3 all_data = {ticker:web.get_data_yahoo(ticker) for ticker in tickers}
 4  4 price = pd.DataFrame({ticker:data['Adj Close'] for ticker,data in all_data.items()})
 5  5 volums = pd.DataFrame({ticker:data['Volume'] for ticker,data in all_data.items()})
 6  6 returns = price.pct_change()
 7  7 print(returns.tail())
 8  8 print(returns['AAPL'].corr(returns['IBM']))
 9  9 print(returns.corr())   #计算相关性
10 10 print(returns.cov())  #计算协整性
11 11 print(returns.corrwith(volums))

View Code

3.数据分析中的分组聚合、转化操作

    1.使用groupby方法分组

    DataFrame.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_by=True,squeeze=False,**ksargs)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 import pandas as pd
 2 df = pd.DataFrame({'key1':["a","a","b","b","a"],
 3               "key2":["one","two","one","two","one"],
 4               "data1":np.random.randn(5),
 5               "data2":np.random.randn(5)})
 6 print(df)
 7 # group = df['data1'].groupby(df['key1']) #对data1列进行分组,获得一个group对象
 8 # group= df.groupby(df['key1'])['data1']   #两个等价
 9 group = df.groupby(df['key1'])  #对整个DataFrame分组
10 print(group.count())  #返回分组的数目
11 print(group.head())  #返回每组的前几个值
12 print(group.max())   #返回每组的最大值
13 print(group.mean())  #返回每组的均值
14 print(group.median())  #返回每组的中位数
15 print(group.cumcount())  #对每个分组中的成员进行标记
16 print(group.size())  #返回每个分组的大小
17 print(group.min())  #返回每个分组的最小值
18 print(group.std())  #返回每组的标准差
19 print(group.sum())  #返回每组的和
20 group2 = df['data1'].groupby([df['key1'],df['key2']])  #根据key1,key2分组

View Code

2.使用agg和aggregate方法聚合,能够将函数应用于每一列

    DataFrame.agg(func,axis=0,*args,**kwargs)

    DataFrame.aggregate(func,axis=0,*args,**kwargs)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 import pandas as pd
 2 df = pd.DataFrame({'key1':["a","a","b","b","a"],
 3               "key2":["one","two","one","two","one"],
 4               "data1":np.random.randn(5),
 5               "data2":np.random.randn(5)})
 6 group = df['data1'].groupby(df['key1']) #对data1列进行分组,获得一个group对象
 7 group= df.groupby(df['key1'])['data1']   #两个等价
 8 group = df.groupby(df['key1'])  #对整个DataFrame分组
 9 print(group.count())  #返回分组的数目
10 print(group.head())  #返回每组的前几个值
11 print(group.max())   #返回每组的最大值
12 print(group.mean())  #返回每组的均值
13 print(group.median())  #返回每组的中位数
14 print(group.cumcount())  #对每个分组中的成员进行标记
15 print(group.size())  #返回每个分组的大小
16 print(group.min())  #返回每个分组的最小值
17 print(group.std())  #返回每组的标准差
18 print(group.sum())  #返回每组的和
19 print(group.quantile(0.9))  #返回每组的分位数
20 group2 = df['data1'].groupby([df['key1'],df['key2']])  #根据key1,key2分组
21 print(group.agg(np.mean))  #返回均值
22 def f(x):
23     return x.max()-x.min()
24 print(group.agg(f))      #使用自定义函数
25 group3 = df.groupby(df["key1"])
26 print(group3.agg({"data1":np.mean,"data2":np.max}))  #对data1 和 data2分别操作

View Code

3.使用apply方法聚合,apply方法类似于agg方法,能够将函数应用于每一列。不同之处在于,与agg方法相比,apply方法传入的函数只能作用于这个DataFrame或Series,而无法像agg一样能够对不同字段函数使用不同函数来获取不同结果。

    DataFrame.apply(func,axis=0,broadcast=False,raw=False,reduce=None,args=(),**kwds)

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
df = pd.DataFrame({'key1':["a","a","b","b","a"],
              "key2":["one","two","one","two","one"],
              "data1":np.random.randn(5),
              "data2":np.random.randn(5)})
group = df['data1'].groupby(df['key1']) #对data1列进行分组,获得一个group对象
# group= df.groupby(df['key1'])['data1']   #两个等价
group = df.groupby(df['key1'])  #对整个DataFrame分组
print(group.count())  #返回分组的数目
print(group.head())  #返回每组的前几个值
print(group.max())   #返回每组的最大值
print(group.mean())  #返回每组的均值
print(group.median())  #返回每组的中位数
print(group.cumcount())  #对每个分组中的成员进行标记
print(group.size())  #返回每个分组的大小
print(group.min())  #返回每个分组的最小值
print(group.std())  #返回每组的标准差
print(group.sum())  #返回每组的和
print(group.quantile(0.9))  #返回每组的分位数
group2 = df['data1'].groupby([df['key1'],df['key2']])  #根据key1,key2分组
print(group.agg(np.mean))  #返回均值
def f(x):
    return x.max()-x.min()
print(group.agg(f))      #使用自定义函数
group3 = df.groupby(df["key1"])
print(group3.agg({"data1":np.mean,"data2":np.max}))  #对data1 和 data2分别操作
print(group3[["data1","data2"]].apply(lambda x:(x.mean()-x.min())/(x.max()-x.min())))#使用自定义函数

View Code

4.使用transform方法聚合

    transform方法能够对整个DataFrame的所有元素进行操作,transform只有一个函数"func

4.创建透视表和交叉表

    1.使用pivot_table函数制作透视表

    pandas.pivot_table(data,values=None,index=None,columns=None,aggfunc="mean",fill_value=None,margins=False,dropna=True,margins_name="all")

    index:表示行分组键,clolums:表示列分组键 func:聚合函数 fill_value :对缺失值进行填充

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
l = pd.pivot_table(df[["key1",'data1',"data2"]],index="key1")
print(l)

View Code

2.使用crosstab函数创建交叉表

    pandas.crosstab(index,columns,values=None,rownames=None,colnames=None,aggfunc=None,margins=False,dropna=True,normalise=False)

    index:行索引键 columns:列索引键,value:聚合数据  rownames:行分组键,colnames:列分组键 aggfunc:聚合函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
l2 = pd.crosstab(index=df["key1"],columns=df["key2"],values=df["data1"],aggfunc=np.sum)
print(l2)

View Code

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/05/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
groupby函数详解
这是由于变量grouped是一个GroupBy对象,它实际上还没有进行任何计算,只是含有一些有关分组键df[‘key1’]的中间数据而已,然后我们可以调用配合函数(如:.mean()方法)来计算分组平均值等。   因此,一般为方便起见可直接在聚合之后+“配合函数”,默认情况下,所有数值列都将会被聚合,虽然有时可能会被过滤为一个子集。   一般,如果对df直接聚合时, df.groupby([df['key1'],df['key2']]).mean()(分组键为:Series)与df.groupby(['key1','key2']).mean()(分组键为:列名)是等价的,输出结果相同。   但是,如果对df的指定列进行聚合时, df['data1'].groupby(df['key1']).mean()(分组键为:Series),唯一方式。 此时,直接使用“列名”作分组键,提示“Error Key”。 注意:分组键中的任何缺失值都会被排除在结果之外。
全栈程序员站长
2022/08/24
4K0
groupby函数详解
python数据分析——数据分类汇总与统计
数据分类汇总与统计是指将大量的数据按照不同的分类方式进行整理和归纳,然后对这些数据进行统计分析,以便于更好地了解数据的特点和规律。
鲜于言悠
2024/03/20
1.9K0
python数据分析——数据分类汇总与统计
《利用Python进行数据分析·第2版》第10章 数据聚合与分组运算10.1 GroupBy机制10.2 数据聚合10.3 apply:一般性的“拆分-应用-合并”10.4 透视表和交叉表10.5 总
对数据集进行分组并对各组应用一个函数(无论是聚合还是转换),通常是数据分析工作中的重要环节。在将数据集加载、融合、准备好之后,通常就是计算分组统计或生成透视表。pandas提供了一个灵活高效的gruopby功能,它使你能以一种自然的方式对数据集进行切片、切块、摘要等操作。 关系型数据库和SQL(Structured Query Language,结构化查询语言)能够如此流行的原因之一就是其能够方便地对数据进行连接、过滤、转换和聚合。但是,像SQL这样的查询语言所能执行的分组运算的种类很有限。在本章中你将会看
SeanCheney
2018/04/24
5.2K0
《利用Python进行数据分析·第2版》第10章 数据聚合与分组运算10.1 GroupBy机制10.2 数据聚合10.3 apply:一般性的“拆分-应用-合并”10.4 透视表和交叉表10.5 总
python数据分析——数据分类汇总与统计
推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。 https://www.captainbed.cn/f1
鲜于言悠
2025/03/08
1.4K1
python数据分析——数据分类汇总与统计
Pandas常用的数据处理方法
本文的Pandas知识点包括: 1、合并数据集 2、重塑和轴向旋转 3、数据转换 4、数据聚合 1、合并数据集 Pandas中合并数据集有多种方式,这里我们来逐一介绍 1.1 数据库风格合并 数据库风格的合并指根据索引或某一列的值是否相等进行合并的方式,在pandas中,这种合并使用merge以及join函数实现。 先来看下面的例子: df1 = pd.DataFrame({'key':['b','b','a','c','a','a','b'],'data1':range(7)}) df2 = pd.Dat
石晓文
2018/04/11
8.6K0
Pandas常用的数据处理方法
Pandas
Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。Pandas 的目标是成为 Python 数据分析实践与实战的必备高级工具,其长远目标是成为最强大、最灵活、可以支持任何语言的开源数据分析工具。经过多年不懈的努力,Pandas 离这个目标已经越来越近了。
爱编程的小明
2022/09/05
9.7K0
Pandas
Python中的groupby分组
这个是groupby的最常见操作,根据某一列的内容分为不同的维度进行拆解,将同一维度的再进行聚合
全栈程序员站长
2022/09/01
2.3K0
Python中的groupby分组
Pandas进阶之数据聚合
---- 概述 在之前的前面几篇博客中,详细介绍了Pandas的一些基础和高级特性。今天博主继续介绍一个Pandas的进阶之数据聚合。 数据聚合 pandas可以支持像sql语句那样,对数据进行聚合操作。比如:groupby,combine等等。 GroupBy技术 我们可以将一个Pandas的DataFrame结构进行拆分-应用-合并操作。比如: In [6]: df = DataFrame({'key1':'aabba','key2':["one","two","one","two ...: "
吕海峰
2018/04/03
1.1K0
python-for-data-groupby使用和透视表
第十章主要讲解的数据聚合与分组操作。对数据集进行分类,并在每一个组上应用一个聚合函数或者转换函数,是常见的数据分析的工作。
皮大大
2021/03/01
2.2K0
python-for-data-groupby使用和透视表
Pandas分组与聚合1.分组 (groupby)一、GroupBy对象:DataFrameGroupBy,SeriesGroupBy二、GroupBy对象支持迭代操作三、GroupBy对象可以转换成
文章来源:Python数据分析 1.分组 (groupby) 对数据集进行分组,然后对每组进行统计分析 SQL能够对数据进行过滤,分组聚合 pandas能利用groupby进行更加复杂的分组运算
Python攻城狮
2018/08/23
24.4K0
Pandas分组与聚合1.分组 (groupby)一、GroupBy对象:DataFrameGroupBy,SeriesGroupBy二、GroupBy对象支持迭代操作三、GroupBy对象可以转换成
Python 数据分析(PYDA)第三版(五)
对数据集进行分类并对每个组应用函数,无论是聚合还是转换,都可能是数据分析工作流程的关键组成部分。加载、合并和准备数据集后,您可能需要计算组统计信息或可能需要为报告或可视化目的计算数据透视表。pandas 提供了一个多功能的groupby接口,使您能够以自然的方式切片、切块和总结数据集。
ApacheCN_飞龙
2024/05/24
5250
Python 数据分析(PYDA)第三版(五)
python中groupby()函数讲解
# -*- coding: utf-8 -*- import pandas as pd import numpy as np df = pd.DataFrame({'key1':list('aabba'), 'key2': ['one','two','one','two','one'], 'data1': ['1','3','5','7','9'], 'data2': ['2','4','6','
py3study
2020/01/07
3.1K0
数据科学 IPython 笔记本 7.11 聚合和分组
大数据分析的必要部分是有效的总结:计算聚合,如sum(),mean(),median(),min()和max(),其中单个数字提供了大数据集的潜在本质的见解。在本节中,我们将探讨 Pandas 中的聚合,从类似于我们在 NumPy 数组中看到的简单操作,到基于groupby概念的更复杂的操作。
ApacheCN_飞龙
2022/06/03
4K0
数据科学 IPython 笔记本 7.11 聚合和分组
13个Pandas实用技巧,有点香 !
归纳整理了一些工作中常用到的pandas使用技巧,方便更高效地实现数据分析。文章很短,不用收藏就能Get~
Python数据科学
2020/06/22
1.1K0
数据清洗、合并、转化和重构
1、数据清洗是数据分析关键的一步,直接影响之后的处理工作 2、数据需要修改吗?有什么需要修改的吗?数据应该怎么调整才能适用于接下来的分析和挖掘? 3、是一个迭代的过程,实际项目中可能需要不止一次地执行这些清洗操作 4、处理缺失数据:pd.fillna(),pd.dropna() 1、数据连接(pd.merge) 1、pd.merge 2、根据单个或多个键将不同DataFrame的行连接起来 3、类似数据库的连接操作 示例代码: import pandas as pd import numpy as np
用户1332428
2018/03/08
9760
pandas多表操作,groupby,时间操作
使用场景:有两张表left和right,一般要求它们的表格结构一致,数据量也一致,使用right的数据去填补left的数据缺漏 如果在同一位置left与right数据不一致,保留left的数据
李智
2018/08/03
4K0
pandas多表操作,groupby,时间操作
pandas的iterrows函数和groupby函数
iterrows() 是在DataFrame中的行进行迭代的一个生成器,它返回每行的索引及一个包含行本身的对象。
润森
2022/09/22
3.6K0
pandas的iterrows函数和groupby函数
基于pandas数据预处理基础操作
# -*- coding: utf-8 -*- import numpy as np import pandas as pd #一、创建数据 #1.通过传递一个list对象来创建一个Series,pandas会默认创建整型索引 s = pd.Series([1,3,np.nan,5,8]) #2.通过传递一个numpy array,时间索引以及列标签来创建一个DataFrame dates = pd.date_range('20170301',periods = 6) df1 = pd.DataFram
hankleo
2020/09/17
7850
机器学习测试笔记(8)——分组聚合
https://item.m.jd.com/product/10023427978355.html
顾翔
2021/01/04
3240
机器学习测试笔记(8)——分组聚合
[71]pandas分组与聚合
分组 (groupby) 对数据集进行分组,然后对每组进行统计分析 SQL能够对数据进行过滤,分组聚合 pandas能利用groupby进行更加复杂的分组运算 分组运算过程:split->apply->combine 拆分:进行分组的根据 应用:每个分组运行的计算规则 合并:把每个分组的计算结果合并起来 示例代码: import pandas as pd import numpy as np dict_obj = {'key1' : ['a', 'b', 'a
周小董
2022/04/12
6880
[71]pandas分组与聚合
推荐阅读
相关推荐
groupby函数详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验