我的编程空间,编程开发者的网络收藏夹
学习永远不晚

我的Python分析成长之路9

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

我的Python分析成长之路9

pandas入门

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

1.pandas数据结构

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

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

 

 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

 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[行索引位置,列索引位置],传递是区间,左闭右闭

    

 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,3列
16 # print(df2.ilov[where_i,where_j][condition])
17 df2.iloc[condition,[]].values  #iloc方法不能接受表达式,条件返回的是一个Series,取出Series的值
View Code
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,索引是唯一值序列,值是计数个数,按照个数降序排序

 

 

 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)

    

 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)

    

 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)

    

 
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 :对缺失值进行填充

    

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:聚合函数

l2 = pd.crosstab(index=df["key1"],columns=df["key2"],values=df["data1"],aggfunc=np.sum)
print(l2)
View Code

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

我的Python分析成长之路9

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

我的Python分析成长之路9

pandas入门统计分析是数据分析的重要组成部分,它几乎贯穿整个数据分析的流程。运用统计方法,将定量与定性结合,进行的研究活动叫做统计分析。而pandas是统计分析的重要库。1.pandas数据结构    在pandas中,有两个常用的数据
2023-01-30

我的Python分析成长之路3

一 集合                                                                                                                    
2023-01-30

我的Python分析成长之路8

Numpy数值计算基础  Numpy:是Numerical Python的简称,它是目前Python数值计算中最为基础的工具包,Numpy是用于数值科学计算的基础模块,不但能够完成科学计算的任而且能够用作高效的多维数据容器,可用于存储和处理
2023-01-30

我的Python分析成长之路7

类一、编程范式:       1.函数式编程   def       2.面向过程编程   (Procedural Programming)        基本设计思路就是程序一开始是要着手解决一个大的问题,然后把一个大问题分解成很多个小问
2023-01-30

我的Python分析成长之路10

matplot数据可视化基础  制作提供信息的可视化(有时称作绘图)是数据分析中最重要任务之一。1.图片(画布)与子图    plt.figure :创建一张空白的图片,可以指定图片的大小、像素。    figure.add_subplot
2023-01-30

我的Python成长之路—03

1.文件管理 <1>查看文件信息:ls ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令。 Linux文件或者目录名称最长可以有265个字符,“.”
2023-01-31

Python成长之路第二篇(3)_字典的

字典的置函数用法(字典dict字典中的key不可以重复)class dict(object):"""dict() -> new empty dictionarydict(mapping) -> new dictionary initiali
2023-01-31

Python数据分析:数据驱动成功之路

数据分析是信息时代的关键技能,而 Python 已成为数据分析领域不可或缺的工具。Python 提供了广泛的库和工具,使数据探索、建模和可视化变得容易,为数据驱动决策和成功铺平了道路。
Python数据分析:数据驱动成功之路
2024-02-17

如何进行Python数据分析?正确的“入门之路”三部曲!

Python是一种面向对象、直译式计算机程序设计语言,由于他简单、易学、免费开源、可移植性、可扩展性等特点,Python又被称之为胶水语言。下图为主要程序语言近年来的流行趋势,Python受欢迎程度扶摇直上。由于Python拥有非常丰富的库
2023-06-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录