Pandas统计分析基础(基础篇,新手必看)

黎明之道 等级 1314 0 0

Pandas统计分析基础

Pandas(Python Data Analysis Library)是基于NumPy的数据分析模块,它提供了大量标准数据模型和高效操作大型数据集所需的工具,可以说Pandas是使得Python能够成为高效且强大的数据分析环境的重要因素之一。

导入方式:import pandas as pd

Pandas有三种数据结构:Series、DataFrame和Panel。Series类似于一维数组;DataFrame是类似表格的二维数组;Panel可以视为Excel的多表单Shee

一、Pandas中的数据结构

1.Series

Series 是一种一维数组对象,包含了一个值序列,并且包含了数据标签,称为索引(index),可通过索引来访问数组中的数据。

Series的创建:

pd.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False) 

通过列表创建Series:

import pandas as pd
obj = pd.Series([1, -2, 3, -4]) #仅有一个数组构成
print(obj) 

Pandas统计分析基础(基础篇,新手必看)
创建Series时指定索引:

i = ["a", "c", "d", "a"]
v = [2, 4, 5, 7]
t = pd.Series(v, index = i, name = "col")
print(t) 

Pandas统计分析基础(基础篇,新手必看)
尽管创建Series指定了index参数,实际Pandas还是有隐藏的index位置信息的。所以Series有两套描述某条数据的手段:位置和标签.

Series位置和标签的使用:
Pandas统计分析基础(基础篇,新手必看)
Pandas统计分析基础(基础篇,新手必看)
通过字典创建:

如果数据被存放在一个Python字典中,也可以直接通过这个字典来创建Series。

sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj3 = pd.Series(sdata)
print(obj3) 

Pandas统计分析基础(基础篇,新手必看)
键值和指定的索引不匹配:

sdata = {"a" : 100, "b" : 200, "e" : 300}
letter = ["a", "b","c"  , "e" ]
obj =  pd.Series(sdata, index = letter)
print(obj) 

Pandas统计分析基础(基础篇,新手必看)
不同索引数据的自动对齐:

sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj1 = pd.Series(sdata)
states = ['California', 'Ohio', 'Oregon', 'Texas']
obj2 = pd.Series(sdata, index = states)
print(obj1+obj2) 

Pandas统计分析基础(基础篇,新手必看)
Series索引的修改:

obj = pd.Series([4,7,-3,2])
obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan']
print(obj) 

Pandas统计分析基础(基础篇,新手必看)

2.DataFrame

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。

 DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。 

DataFrame的创建:

格式:

pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False) 

创建:

data = {
    'name':['张三', '李四', '王五', '小明'],
    'sex':['female', 'female', 'male', 'male'],
    'year':[2001, 2001, 2003, 2002],
    'city':['北京', '上海', '广州', '北京']
}
df = pd.DataFrame(data)
print(df) 

Pandas统计分析基础(基础篇,新手必看)
DataFrame的索引:
Pandas统计分析基础(基础篇,新手必看)
DataFrame创建时的空缺值:

df2 = pd.DataFrame(data, columns = ['name', 'year', 'sex', 'city','address'])
print(df2) 

Pandas统计分析基础(基础篇,新手必看)
DataFrame构造函数的columns函数给出列的名字,index给出label标签。

DataFrame创建时指定列名:

df3 = pd.DataFrame(data, columns = ['name', 'sex', 'year', 'city'], index = ['a', 'b', 'c', 'd'])
print(df3) 

Pandas统计分析基础(基础篇,新手必看)
DataFrame的属性:
Pandas统计分析基础(基础篇,新手必看)

3.索引对象

Pandas的索引对象负责管理轴标签和其他元数据(比如轴名称等)。构建Series或 DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index。

显示DataFrame的索引和列:

print(df) 
print(df.index)
print(df.columns) 

Pandas统计分析基础(基础篇,新手必看)
每个索引都有一些方法和属性,它们可用于设置逻辑并回答有关该索引所包含的数据的常见问题。Index的常用方法和属性:
Pandas统计分析基础(基础篇,新手必看)

4.查看DataFrame的常用属性

DataFrame的基础属性有values、index、columns、dtypes、ndim和shape,分别可以获取DataFrame的元素、索引、列名、类型、维度和形状。

Pandas统计分析基础(基础篇,新手必看)

二、Pandas索引操作

1.重新索引

索引对象是无法修改的,因此,重新索引是指对索引重新排序而不是重新命名,如果某个索引值不存在的话,会引入缺失值。

对于重建索引引入的缺失值,可以利用fill_value参数填充。

obj = pd.Series([7.2,-4.3,4.5,3.6],index=list("badc"))
obj

obj.reindex(list("abcde")) 

Pandas统计分析基础(基础篇,新手必看)

重建索引时填充缺失值。
Pandas统计分析基础(基础篇,新手必看)
缺失值的前向填充:
Pandas统计分析基础(基础篇,新手必看)
缺失值的后向填充:
Pandas统计分析基础(基础篇,新手必看)

DataFrame数据:

df4 = pd.DataFrame(np.arange(9).reshape(3,3),
index = ['a','c','d'],columns = ['one','two','four'])
print(df4) 

Pandas统计分析基础(基础篇,新手必看)
reindex操作:
Pandas统计分析基础(基础篇,新手必看)
传入fill_value = n用n代替缺失值。

Pandas统计分析基础(基础篇,新手必看)
reindex函数参数:
Pandas统计分析基础(基础篇,新手必看)

2.更换索引

如果不希望使用默认的行索引,则可以在创建的时候通过Index参数来设置。

在DataFrame数据中,如果希望将列数据作为索引,则可以通过set_index方法来实现。

重建索引:

Pandas统计分析基础(基础篇,新手必看)

三、DataFrame的数据查询与编辑

1.DataFrame数据的查询

在数据分析中,选取需要的数据进行分析处理是最基本操作。在Pandas中需要通过索引完成数据的选取。

选取列:
通过列索引或以属性的方式可以单独获取DataFrame的列数据,返回的数据类型为Series。Pandas统计分析基础(基础篇,新手必看)
选取行:
通过切片形式可以选取一行或多行数据
Pandas统计分析基础(基础篇,新手必看)
Pandas统计分析基础(基础篇,新手必看)
选取通过DataFrame提供的head和tail方法可以得到多行数据,但是用这两种方法得到的数据都是从开始或者末尾获取连续的数据, 而利用sample可以随机抽取数据并显示。
head() #默认获取前5行
head(n)#获取前n行
tail()#默认获取后5行
head(n)#获取后n行
sample(n)#随机抽取n行显示

选取行和列:

DataFrame.loc(行索引名称或条件,列索引名称)
DataFrame.iloc(行索引位置,列索引位置)
Pandas统计分析基础(基础篇,新手必看)

利用iloc选取行和列:
Pandas统计分析基础(基础篇,新手必看)
布尔选择

可以对DataFrame中的数据进行布尔方式选择 

data[data["数据列名"]==20]


### [](https://blog.csdn.net/sjjsaaaa/article/details/109604951)DataFrame数据的编辑

**增加数据:**  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/04514f6d7c3d3dfc1a84363f5457fe61.png)  
增加列时,只需为要增加的列赋值即可创建一个新的列。

![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/d8e137052c0c492ab23aaa986b2074e2.png)  
**删除数据:**

删除数据直接用drop方法,通过axis参数确定是删除的是行还是列。默认数据删除不修改原数据,需要在原数据删除行列需要设置参数inplace = True。

![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/5094a6b7bf19fea7dbc88b1e9117ed39.png)  
删除列:  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/5a18eb9b20bb71b9fca878ea54b2d2a7.png)  
**修改数据:**

修改数据时直接对选择的数据赋值即可。  
需要注意的是,数据修改是直接对DataFrame数据修改,操作无法撤销,因此更改数据时要做好数据备份。

[](https://blog.csdn.net/sjjsaaaa/article/details/109604951)四、Pandas数据运算
------------------------------------------------------------------------

### [](https://blog.csdn.net/sjjsaaaa/article/details/109604951)1.算术运算

Pandas的数据对象在进行算术运算时,如果有相同索引则进行算术运算,如果没有,则会自动进行数据对齐,但会引入缺失值。

**series相加:**  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/9c7ebaec0ef6475b699836c1c90666e5.png)  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/403c44436693ddda473479da6e24f125.png)  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/39cd5ef28eac3bff8659f7273ce8d39d.png)  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/dbcf673a124b5d0d0f10b38b3cd74548.png)

### [](https://blog.csdn.net/sjjsaaaa/article/details/109604951)2.函数应用和映射

已定义好的函数可以通过以下三种方法应用到数据:

1.  map函数:将函数套用到Series的每个元素中;
2.  apply函数,将函数套用到DataFrame的行或列上,行与列通过axis参数设置;
3.  applymap函数,将函数套用到DataFrame的每个元素上。

将水果价格表中的“元”去掉。

data = {'fruit':['apple','grape','banana'],'price':['30元','43元','28元']} df1 = pd.DataFrame(data) print(df1) def f(x): return x.split('元')[0] df1['price'] = df1['price'].map(f) print('修改后的数据表:\n',df1)


![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/1cdd76a9ccadd75776032d746e074a24.png)  
**apply函数的使用方法:**

![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/9082074f6c39599996c0bb77ae1b62f7.png)  
**applymap函数的用法:**  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/c3933232befb91c38a6794073692432d.png)

### [](https://blog.csdn.net/sjjsaaaa/article/details/109604951)3.排序

sort\_index方法:对索引进行排序,默认为升序,降序排序时加参数 ascending=False。  
sort\_values方法:对数值进行排序。by参数设置待排序的列名  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/f5b9469d2adc1cdbc27243d62f8879b1.png)

### [](https://blog.csdn.net/sjjsaaaa/article/details/109604951)4.汇总与统计

**数据汇总:**

在DataFrame中,可以通过sum方法对每列进行求和汇总,与Excel中的sum函数类似。如果设置axis = 1指定轴方向,可以实现按行汇总。  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/cdcf523e9b0a47d6311fda2b40455c16.png)  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/b168dc7f89b9403175401109b0e91178.png)  
**数据描述与统计**

利用describe方法会对每个数值型的列数据进行统计

df2.describe()


**Pandas中常用的描述性统计量**  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/3df8c470ed0a900da034504da7ac932b.png)  
对于类别型特征的描述性统计,可以使用频数统计表。Pandas库中通过unique方法获取不重复的数组,利用value\_counts方法实现频数统计。![+](https://img-hello-world.oss-cn-beijing.aliyuncs.com/3660d7323b047fc10800693b5b5fc229.png)

[](https://blog.csdn.net/sjjsaaaa/article/details/109604951)五、数据分组与聚合
---------------------------------------------------------------------

### [](https://blog.csdn.net/sjjsaaaa/article/details/109604951)1.数据分组

**groupby方法**

groupby方法可以根据索引或字段对数据进行分组。


格式为:

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


groupby方法的参数及其说明:  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/f5ed8234a5a8318a3ee6189458f317a4.png)  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/fbcd5e536f5c4f4a8b5dd531f13d1307.png)  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/6e0c848ba527fb35e507f4a5ecad6ba6.png)  
**按列名分组**

DataFrame数据的列索引名可以作为分组键,但需要注意的是用于分组的对象必须是DataFrame数据本身,否则搜索不到索引名称会报错。  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/bd1c1ccaaa7837d4ecfecbab9ba7a07c.png)  
**按列表或元组分组**  
分组键还可以是长度和DataFrame行数相同的列表或元组,相当于将列表或元组看做DataFrame的一列,然后将其分组。  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/542ccdc91ff032711f9d77ef495870dd.png)  
**按字典分组**

如果原始的DataFrame中的分组信息很难确定或不存在,可以通过字典结构,定义分组信息。  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/e49a010b043d02cc0df2d11143bd7c48.png)  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/3037d1ebefac02a6b809b7e6931a0dd5.png)  
**按函数分组**

函数作为分组键的原理类似于字典,通过映射关系进行分组,但是函数更加灵活。  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/ef7dd2183e9448951b065147645ac960.png)  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/4c24d1309039fe1da290f19f265533c9.png)

### [](https://blog.csdn.net/sjjsaaaa/article/details/109604951)2.数据聚合

**聚合函数**

除了之前示例中的mean函数外,常用的聚合运算还有count和sum等。

**聚合运算方法**  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/8f2b5062341dcdb4750c8f4a8d0994f6.png)  
**使用agg方法聚合数据**

agg、aggregate方法都支持对每个分组应用某个函数,包括Python内置函数或自定义函数。同时,这两个方法也能够直接对DataFrame进行函数应用操作。  
在正常使用过程中,agg和aggregate函数对DataFrame对象操作的功能基本相同,因此只需掌握一个即可。

### [](https://blog.csdn.net/sjjsaaaa/article/details/109604951)3.分组运算

1.  transform方法  
    通过transform方法可以将运算分布到每一行。

2.  使用apply方法聚合数据  
    apply方法类似于agg方法,能够将函数应用于每一列。


[](https://blog.csdn.net/sjjsaaaa/article/details/109604951)六、数据透视表
-------------------------------------------------------------------

### [](https://blog.csdn.net/sjjsaaaa/article/details/109604951)1.透视表

数据透视表(Pivot Table)是数据分析中常见的工具之一,根据一个或多个键值对数据进行聚合,根据列或行的分组键将数据划分到各个区域。

pivot_table函数格式: pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')


**pivot\_table函数主要参数及其说明**  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/1ba2f2e12f36a76f232a6fe34f6fd522.png)

### [](https://blog.csdn.net/sjjsaaaa/article/details/109604951)2.交叉表

交叉表是一种特殊的透视表,主要用于计算分组频率。

crosstab的格式: crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, dropna=True, normalize=False)


**crosstab主要参数及其说明**  
![在这里插入图片描述](https://img-hello-world.oss-cn-beijing.aliyuncs.com/eba1e98db53d56c940e01932ea3e04e9.png)

[](https://blog.csdn.net/sjjsaaaa/article/details/109604951)七、Pandas可视化
-----------------------------------------------------------------------

### [](https://blog.csdn.net/sjjsaaaa/article/details/109604951)1.线形图

Pandas库中的Series和DataFrame中都有绘制各类图表的plot方法,默认绘制的都是线形图。  
通过DataFrame对象的plot方法可以为各列绘制一条线,并创建图例。

### [](https://blog.csdn.net/sjjsaaaa/article/details/109604951)2.柱状图

在Pandas中绘制柱状图只需在plot函数中加参数kind = ‘bar’,如果类别较多,可以绘制水平柱状图(kind = ‘barh’)。

### [](https://blog.csdn.net/sjjsaaaa/article/details/109604951)3.直方图和密度图

直方图用于频率分布,y轴为数值或比率。绘制直方图,可以观察数据值的大致分布规律。pandas中的直方图可以通过hist方法绘制。  
核密度估计是对真实密度的估计,其过程是将数据的分布近似为一组核(如正态分布)。通过plot函数的kind = ‘kde’可以进行绘制。

### [](https://blog.csdn.net/sjjsaaaa/article/details/109604951)4.散点图

通过plot函数的kind = 'scatter’可以进行绘制。

收藏
评论区

相关推荐

Pandas统计分析基础(基础篇,新手必看)
Pandas统计分析基础Pandas(Python Data Analysis Library)是基于NumPy的数据分析模块,它提供了大量标准数据模型和高效操作大型数据集所需的工具,可以说Pandas是使得Pyth
Pandas数据载入与预处理(详细的数据Python处理方法)
Pandas数据载入与预处理对于数据分析而言,数据大部分来源于外部数据,如常用的CSV文件、Excel文件和数据库文件等。Pandas库将外部数据转换为DataFrame数据格式,处理完成后再存储到相应的外部文件
Python数据分析实战(2)使用Pandas进行数据分析
一、Pandas的使用 1.Pandas介绍Pandas的主要应用包括: 数据读取 数据集成 透视表 数据聚合与分组运算 分段统计 数据可视化Pandas的使用很灵活,最重要的两个数据类型是DataFrame和Series。对DataFrame最直观的理解是把它当成一个Excel表格文件,如下:索引是从0开始的,也
分享5个高效的pandas函数!
熟练掌握pandas函数都能帮我们在数据分析过程中节省时间。pandas还有很多让人舒适的用法,这次就为大家介绍5个pandas函数!本文来源towardsdatascience,作者Soner Yıldırım,由Python大数据分析编译。1\. explodeexplode用于将一行数据展开成多行。比如说dataframe中某一行其中一个元素包含多个同
总结了pandas提取数据的15种方法,统统只需1行代码,真香!
pandas是python数据分析必备工具,它有强大的数据清洗能力,往往能用非常少的代码实现较复杂的数据处理今天,鸟哥总结了pandas筛选数据的15个常用技巧,主要包括5个知识点:1.比较运算:、<、、、<、!2.范围运算:between(left,right)3.字符筛选:str.contains(pattern或字符串,naFalse)4.逻辑运算:&
14个pandas神操作,手把手教你写代码
「数仓宝贝库」,带你学数据!导读: Pandas是Python数据分析的利器,也是各种数据建模的标准工具。本文带大家入门Pandas,将介绍Python语言、Python数据生态和Pandas的一些基本功能。 在Python语言应用生态中,数据科学领域近年来十分热门。作为数据科学中一个非常基础的库,Pandas受到了广泛关注。Pandas可以将现实中来
14个pandas神操作,手把手教你写代码
「数仓宝贝库」,带你学数据!导读:Pandas是Python数据分析的利器,也是各种数据建模的标准工具。本文带大家入门Pandas,将介绍Python语言、Python数据生态和Pandas的一些基本功能。 在Python语言应用生态中,数据科学领域近年来十分热门。作为数据科学中一个非常基础的库,Pandas受到了广泛关注。Pandas可以将现实中来源
DataFrame与shp文件相互转换
因为习惯了使用pandas的DataFrame数据结构,同时pandas作为一个方便计算和表操作的数据结构具有十分显著的优势,甚至很多时候dataFrame可以作为excel在使用,而在用python操作gis的shp文件时很不顺畅,不太符合使用习惯,故写了一个DataFrame与arcgis地理文件相互转换的函数,这个处理起来可以节约大量的思考时间。 S
Panda处理文本和时序数据?首选向量化
导读 Pandas作为Python数据分析的首选框架,不仅功能强大接口丰富,而且执行效率也相比原生Python要快的多,这是得益于Pandas底层由C实现,同时其向量化执行方式也非常利于并行计算。更重要的是,这种向量化操作不仅适用于数值计算,对于文本和时间格式也有着良好的支持,而这就不得不从Pandas的属性接口谈起。 [**腾讯课堂 |
Pyhon数据分析20——matplotlib可视化(二)之柱状图
atplotlib绘制柱状图 柱状图(bar chart),是一种以长方形的长度为变量的表达图形的统计报告图,由一系列高度不等的纵向条纹表示数据分布的情况,用来比较两个或以上的价值(不同时间或者不同条件),只有一个变量,通常利用于较小的数据集分析。柱状图亦可横向排列,或用多维方式表达。 准备 import numpy as np import
Python 数据分析包:pandas 基础
pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包 类似于 Numpy 的核心是 ndarray,pandas 也是围绕着 Series 和 DataFrame 两个核心数据结构展开的 。Series 和 DataFrame 分别对应于一维的序列和二维的表结构。pandas 约定俗成的导入方法如下: lang:pytho
Python3环境通过JDBC访问非Kerberos环境的Hive
**1.文档编写目的** * * * 在前面Fayson介绍了在Python2的环境下《如何使用Python Impyla客户端连接Hive和Impala》,本篇文章Fayson主要介绍在Python3的环境下使用Impyla访问非Kerberos环境下的Hive以及将获取到的结果集转换为Pandas的DataFrame。 * 内容
Python在网页上展示表格的简单方法
![](https://oscimg.oschina.net/oscnet/22596eed-3e2a-4708-acc1-bc8a22f8588d.jpg) * Python是当今最热门的编程语言 * Pandas是Python下最热门的数据处理与数据分析的库 * Flask是Python下方便简洁的Web开发框架
Python编码格式导致的csv读取错误
Python编码格式导致的csv读取错误(pandas.read\_csv) ====================================== 本文记录python小白我今天遇到的这两个问题(csv.reader和pandas.csv\_read): * pandas模块“CParserError: Error tokenizing da
Pandas入门教程
大家好,我是皮皮。其实这个pandas教程,卷的很严重了,才哥,小P等人写了很多的文章,这篇文章是粉丝【古月星辰】投稿,自己学习过程中整理的一些基础资料,整理成文,这里发出来给大家一起学习。 Pandas入门本文主要详细介绍了pandas的各种基础操作,源文件为zlJob.csv,可以私我进行获取,下图是原始数据部分一览。pandas官网:https://p