Pandas 数据分析基础操作:从创建到统计的实用指南

Pandas 数据分析基础操作:从创建到统计的实用指南

本文介绍了使用 Pandas 进行数据分析的基础操作,包括创建 DataFrame、数据描述、处理空值、计算均值与中位数等常见统计方法。我们展示了如何通过 describe() 方法生成描述性统计信息,并详细解释了累加、累乘、最大值、最小值的计算过程。此外,本文还涵盖了如何使用 Pandas 灵活处理空值(如填充或删除 NaN 值),并指出如何找到数据中的最大值或最小值索引位置。这些基础操作是数据分析工作中不可或缺的工具,帮助读者轻松应对各种数据处理任务。

文章目录

  • Pandas 数据分析基础操作:从创建到统计的实用指南
      • 一 创建和描述 DataFrame
        • 名词解释
      • 二 均值、中位数和 NaN 值处理
      • 三 累加和累乘
      • 四 最大值和最小值
      • 五 处理空值
      • 六 索引最大值和最小值
      • 七 完整代码示例
      • 八 源码地址

导入库

import pandas as pd
import numpy as np

一 创建和描述 DataFrame

创建一个 DataFrame 来作为示例:

data = np.array([[1.39, 1.77, None],[0.34, 1.91, -0.05],[0.34, 1.47, 1.22],[None, 0.27, -0.61]
])df = pd.DataFrame(data, index=["r0", "r1", "r2", "r3"], columns=["c0", "c1", "c2"])
print(df)

describe() 方法提供了概括每个列分布的描述统计数据:

print(df.describe())

Pandas 还可以很容易地创建一个纯数值 DataFrame,以便进行更好的统计操作:

df1 = pd.DataFrame(np.random.random((4, 3)), columns=["c0", "c1", "c2"])
print(df1.describe())

运行结果

              c0        c1        c2
count  4.000000  4.000000  4.000000
mean   0.537270  0.533551  0.498930
std    0.295673  0.374688  0.298645
min    0.314925  0.026976  0.247049
25%    0.322006  0.372198  0.290816
50%    0.444249  0.614003  0.421680
75%    0.659512  0.775355  0.629794
max    0.945659  0.879224  0.905314
名词解释
  • count - 非空(非NA)值的数量。这里每一列都有4个非空值。
  • mean - 平均值。即每列值的总和除以数量(非空值的数量)。例如,c0列的平均值为0.537270。
  • std - 标准差,度量数据的离散程度,即各数据点与平均值的差异。c0列的标准差为0.295673,表示c0列的数据点相对平均值分布的离散程度。
  • min - 最小值。每列中的最小值,如c0列的最小值为0.314925。
  • 25% - 第25百分位数,也称为下四分位数,表示所有数值中有25%的数据点小于或等于这个值。
  • 50% - 中位数或第50百分位数,表示中间值,即有50%的数据点小于或等于此值。它也是数据的中心点。
  • 75% - 第75百分位数,也称为上四分位数,表示所有数值中有75%的数据点小于或等于这个值。
  • max - 最大值。每列中的最大值,如c0列的最大值为0.945659。

二 均值、中位数和 NaN 值处理

数据分析中最常用的操作之一是计算均值或中位数。

print(df.mean())  # 列均值
print(df.mean(axis=1))  # 行均值

Pandas 可以自动忽略 NaN 值,或者您也可选择包含 NaN 值计算:

df = df.replace({None: np.nan})
print(df.mean(axis=0, skipna=False))  # 不忽略 NaN 值

有时数据偏大不适合普遍现象,比如某些情况下会强制 “被平均” ,这个时候去中位数比较合适。

s = pd.Series([1000, 2000, 4000, 100000])
print("mean():", s.mean()) 
# 中位数
print("median():", s.median())  

三 累加和累乘

Pandas 提供了累加 sum()和累乘 prod() 方法。

df = pd.DataFrame(np.arange(12).reshape((4, 3)), columns=["c0", "c1", "c2"])
print("sum():\n", df.sum())
print("prod():\n", df.prod())

你还可以根据需要对行 (axis=1)或者列 (axis=0)进行计算。

四 最大值和最小值

找出数据的最大和最小值

print("max():\n", df.max())
print("min():\n", df.min())

也可以使用 NumPy 中的展品操作,计算所有数据的最大值。

print(df.values.ravel().max())  # 使用 NumPy 进行总体最大值计算

五 处理空值

数据常常会带有空值,Pandas 提供了各种方法来处理这些问题。

  • 辨认空值
print(df.isnull())  # 辨认空值
  • 删除含有空值的行或列
print(df.dropna())  # 默认删除含有 NaN 值的行
print(df.dropna(axis=1))  # 删除含有 NaN 值的列
  • 填充空值
print(df.fillna(111))  # 将所有 NaN 值填充为指定值
values = {"A": 0, "B": 1, "C": 2, "D": 3}
print(df.fillna(value=values))  # 根据列进行定制填充
  • 甚至可以使用另一个 DataFrame 来填充空值
df2 = pd.DataFrame(np.arange(16).reshape((4, 4)), columns=list("ABCD"))
print(df.fillna(df2))

六 索引最大值和最小值

有时候,了解一列数据中最大值或最小值的索引位置是很重要的。

df = pd.DataFrame([[1, 2, 3, 0],[3, 4, None, 1],[3, 5, 2, 1],[3, 2, 2, 3]],columns=list("ABCD"))
print(df.idxmax())  # 找出每列最大值的索引
print(df.idxmin())  # 找出每列最小值的索引

七 完整代码示例

# This is a sample Python script.# Press ⌃R to execute it or replace it with your code.
# Press Double ⇧ to search everywhere for classes, files, tool windows, actions, and settings.import pandas as pd
import numpy as npdef print_hi(name):# Use a breakpoint in the code line below to debug your script.print(f'Hi, {name}')  # Press ⌘F8 to toggle the breakpoint.# 日常一般用法# 均值中位数# df.mean();df.median()# 累加累乘# df.sum();df.prod()# 最大最小# df.max();# df.min()# 处理空值# df.isnull();# df.notnull();# df.dropna();# df.fillna()# 获取索引# df.idxmin();# df.idxmax()data = np.array([[1.39, 1.77, None],[0.34, 1.91, -0.05],[0.34, 1.47, 1.22],[None, 0.27, -0.61]])# df = pd.DataFrame(data, index=["r0", "r1", "r2", "r3"], columns=["c0", "c1", "c2"], dtype=float)df = pd.DataFrame(data, index=["r0", "r1", "r2", "r3"], columns=["c0", "c1", "c2"])print(df)# 非纯数值型数据print(df.describe())# 纯数值型数据df1 = pd.DataFrame(np.random.random((4, 3)), columns=["c0", "c1", "c2"])print(df1)print("\ndescribe:\n", df1.describe())# 均值中位数,第 0 个维度print(df.mean())print(df.mean(axis=0))# 第 1 个维度求均值print(df.mean(axis=1))# Pandas 遇到 NaN,不计算这列、行的数据print()df = df.replace({None: np.nan})# df = df.dropna()print(df.mean(axis=0, skipna=False))print(df.mean(axis=1, skipna=False))# 最后一个为高收入人s = pd.Series([1000, 2000, 4000, 100000])print("mean():", s.mean())  # 拉高平均收入,拉高仇恨print("median():", s.median())  # 比较合理print()# 累加累乘df = pd.DataFrame(np.arange(12).reshape((4, 3)), columns=["c0", "c1", "c2"])print(df)print("sum():\n", df.sum())print("\nsum(axis=0):\n", df.sum(axis=0))print("\nsum(axis=1):\n", df.sum(axis=1))print("prod():\n", df.prod())print("\nprod(axis=0):\n", df.prod(axis=0))print("\nprod(axis=1):\n", df.prod(axis=1))# 最大最小print("max():\n", df.max())print("\nmin():\n", df.min())print(df.max().max())print(df.values.ravel().max())  # 用 Numpy 的方式运算print()# 处理空值# 查看数据用没有空值df = pd.DataFrame([[1, 2, 3, 0],[3, 4, None, 1],[None, None, None, None],[None, 3, None, 4]],columns=list("ABCD"))print(df)print("\nisnull():\n", df.isnull())  # True 就是空print("\nnotnull()\n", df.notnull())  # False 为空print("默认:\n", df.dropna())  # 默认按 axis=0,删除含有 None 的行print("\naxis=1:\n", df.dropna(axis=1))  # 可以换一个 axis drop# 除掉全为空的数据,只要有值就用df1 = pd.DataFrame([[None, None, None], [1, None, 3]])print(df1.dropna(how="all"))  # how 默认为 "any"# 填充 111,对空值进行填充print(df.fillna(111))# 差异化填充values = {"A": 0, "B": 1, "C": 2, "D": 3}print(df.fillna(value=values))# 使用新的 df 来做 nan 填充df2 = pd.DataFrame(np.arange(16).reshape((4, 4)), columns=list("ABCD"))print("df2:\n", df2)print("\nfillna(df2):\n", df.fillna(df2))# 获取索引df = pd.DataFrame([[1, 2, 3, 0],[3, 4, None, 1],[3, 5, 2, 1],[3, 2, 2, 3]],columns=list("ABCD"))print(df)print("\nidxmax():\n", df.idxmax())print("\nidxmax(skipna=False):\n", df.idxmax(skipna=False))print("\nidxmin():\n", df.idxmin())# Press the green button in the gutter to run the script.
if __name__ == '__main__':print_hi('基础统计方法')# See PyCharm help at https://www.jetbrains.com/help/pycharm/

复制粘贴并覆盖到你的 main.py 中运行,运行结果如下。

Hi, 基础统计方法c0    c1    c2
r0  1.39  1.77  None
r1  0.34  1.91 -0.05
r2  0.34  1.47  1.22
r3  None  0.27 -0.61c0    c1    c2
count   3.00  4.00  3.00
unique  2.00  4.00  3.00
top     0.34  1.77 -0.05
freq    2.00  1.00  1.00c0        c1        c2
0  0.945659  0.740733  0.305405
1  0.324367  0.487272  0.247049
2  0.564130  0.879224  0.905314
3  0.314925  0.026976  0.537955describe:c0        c1        c2
count  4.000000  4.000000  4.000000
mean   0.537270  0.533551  0.498930
std    0.295673  0.374688  0.298645
min    0.314925  0.026976  0.247049
25%    0.322006  0.372198  0.290816
50%    0.444249  0.614003  0.421680
75%    0.659512  0.775355  0.629794
max    0.945659  0.879224  0.905314
c0        0.69
c1       1.355
c2    0.186667
dtype: object
c0        0.69
c1       1.355
c2    0.186667
dtype: object
r0        1.58
r1    0.733333
r2        1.01
r3       -0.17
dtype: objectc0      NaN
c1    1.355
c2      NaN
dtype: float64
r0         NaN
r1    0.733333
r2    1.010000
r3         NaN
dtype: float64
mean(): 26750.0
median(): 3000.0c0  c1  c2
0   0   1   2
1   3   4   5
2   6   7   8
3   9  10  11
sum():c0    18
c1    22
c2    26
dtype: int64sum(axis=0):c0    18
c1    22
c2    26
dtype: int64sum(axis=1):0     3
1    12
2    21
3    30
dtype: int64
prod():c0      0
c1    280
c2    880
dtype: int64prod(axis=0):c0      0
c1    280
c2    880
dtype: int64prod(axis=1):0      0
1     60
2    336
3    990
dtype: int64
max():c0     9
c1    10
c2    11
dtype: int64min():c0    0
c1    1
c2    2
dtype: int64
11
11A    B    C    D
0  1.0  2.0  3.0  0.0
1  3.0  4.0  NaN  1.0
2  NaN  NaN  NaN  NaN
3  NaN  3.0  NaN  4.0isnull():A      B      C      D
0  False  False  False  False
1  False  False   True  False
2   True   True   True   True
3   True  False   True  Falsenotnull()A      B      C      D
0   True   True   True   True
1   True   True  False   True
2  False  False  False  False
3  False   True  False   True
默认:A    B    C    D
0  1.0  2.0  3.0  0.0axis=1:Empty DataFrame
Columns: []
Index: [0, 1, 2, 3]0     1    2
1  1.0  None  3.0A      B      C      D
0    1.0    2.0    3.0    0.0
1    3.0    4.0  111.0    1.0
2  111.0  111.0  111.0  111.0
3  111.0    3.0  111.0    4.0A    B    C    D
0  1.0  2.0  3.0  0.0
1  3.0  4.0  2.0  1.0
2  0.0  1.0  2.0  3.0
3  0.0  3.0  2.0  4.0
df2:A   B   C   D
0   0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15fillna(df2):A    B     C     D
0   1.0  2.0   3.0   0.0
1   3.0  4.0   6.0   1.0
2   8.0  9.0  10.0  11.0
3  12.0  3.0  14.0   4.0A  B    C  D
0  1  2  3.0  0
1  3  4  NaN  1
2  3  5  2.0  1
3  3  2  2.0  3idxmax():A    1
B    2
C    0
D    3
dtype: int64idxmax(skipna=False):A    1.0
B    2.0
C    NaN
D    3.0
dtype: float64idxmin():A    0
B    0
C    2
D    0
dtype: int64

八 源码地址

代码地址:

国内看 Gitee 之 pandas/基础统计方法.py

国外看 GitHub 之 pandas/基础统计方法.py

引用 莫烦 Python

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/2236.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【瑞吉外卖】-day03

目录 前言 启动禁用员工账号 消息转换器 1. Jackson (用于JSON) 2. JAXB (用于XML) 3. Gson (用于JSON) 4. MessagePack (用于二进制格式) 页面展示 代码部分 启动禁用员工账号修改(个人意见) 公共字段自动填充 ThreadLocal简要概述 基本用法…

blender导入的图片渲染看不见,图片预览正常,但渲染不出

在使用Blender时,我们经常会遇到导入图片后在预览渲染中显示,但在实际渲染时图片消失的问题。本文将提供详细的解决方法,帮助大家解决“Blender导入的图片渲染图像不显示”的问题。 问题原因 导入的图片在Blender中只是一张图,并…

本质矩阵分解计算Rt

1 本质矩阵的计算 上一文章中描述了本质矩阵的计算,计算机视觉-对极几何-CSDN博客,那么计算得到本质矩阵有什么用?其中一个应用是通过本质矩阵计算得到2D-2D的相对变换。 在相关矩阵计算时,一般会在两幅图像中,根据特征…

【天线&通讯】电力设施检测系统源码&数据集全套:改进yolo11-RFCAConv

改进yolo11-DAttention等200全套创新点大全:电力设施检测系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.11.01 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片或者…

MQTT自动发送消息工具(自动化测试MQTT)

点击下载《MQTT客户端服务端工具》 点击下载《MQTT自动发送消息软件(自动化测试MQTT)》 1. 前言 在软件开发过程中,MQTT常被用作消息队列来完成特定的业务功能。当我们将相关业务代码编写完成后,通常需要编写额外的消息生产和消费代码来模拟消息高峰时…

智慧医疗——提出了一种基于敌对领域适应症预测候选抗癌药物的方法

导言 本方法的研究背景和要点 据估计,未来每两个日本人中就有一人会患上癌症,它是现代人最难以治愈的疾病之一。众所周知,癌症的发生和发展是由于人类和其他动物的细胞生长机制遭到破坏,细胞变成了被称为癌细胞的特殊细胞。 癌…

算法|牛客网华为机试31-40C++

牛客网华为机试 上篇:算法|牛客网华为机试21-30C 文章目录 HJ31 单词倒排HJ32 密码截取HJ33 整数与IP地址间的转换HJ34 图片整理HJ35 蛇形矩阵HJ36 字符串加密HJ37 统计每个月兔子的总数HJ38 求小球落地5次后所经历的路程和第5次反弹的高度HJ39 判断两个IP是否属于同…

C/C++ 随机数生成方法

1. 使用 rand() 和 srand() - 库: <stdlib.h> 或 <cstdlib> - 特点: 伪随机数生成器&#xff0c;简单易用。 - 示例: #include <stdlib.h> #include <time.h> int main() { srand(time(NULL)); // 初始化随机数生成器 int random_nu…

AI大模型重塑软件开发:从代码自动生成到智能测试

随着AI技术的不断发展&#xff0c;AI大模型在软件开发领域的应用日益广泛。从代码自动生成到智能测试&#xff0c;AI大模型正在深刻改变着软件开发的各个环节&#xff0c;重塑着整个开发流程。本文将探讨AI大模型的定义、应用场景、优势以及挑战&#xff0c;并展望未来的发展趋…

Java的内部类

Java内部类 什么是内部类&#xff1f; 类的五大成员&#xff1a;属性、方法、构造方法、代码块、内部类在一个类的里面&#xff0c;再定义一个类 public class Outer { // 外部类class Inner { // 内部类} }public class Test { // 外部其他类public static void main(Strin…

WPF+MVVM案例实战(二十二)- 制作一个侧边弹窗栏(CD类)

文章目录 1、案例效果1、侧边栏分类2、CD类侧边弹窗实现1、样式代码实现2、功能代码实现3 运行效果4、源代码获取1、案例效果 1、侧边栏分类 A类 :左侧弹出侧边栏B类 :右侧弹出侧边栏C类 :顶部弹出侧边栏D类 :底部弹出侧边栏2、CD类侧边弹窗实现 1、样式代码实现 在原有的…

字符串算法

字符串 1.kmp匹配算法Anya and 1100 1.kmp匹配算法 模板题链接 不懂可以看这个~详细的思路 #include <string> #include <iostream>using namespace std; const int N 1000010;string s,p;// s[]是长文本&#xff0c;p[]是模式串&#xff0c;n是s的长度&#xff…

掌控板micropython编程实现OLED显示天气信息

掌控板micropython编程实现OLED显示天气信息 上一个例子已经实现了在掌控板的OLED上显示汉字&#xff0c;本例使用掌控板的wifi访问心知天气&#xff0c;获取天气信息显示在掌控板的OLED上。 访问心知天气主页&#xff08; https://www.seniverse.com/&#xff09;&#xff0…

golang通用后台管理系统03(登录校验,并生成token)

代码 package serviceimport ("fmt"//"fmt""gin/common""gin/config"sysEntity "gin/system/entity"sysUtil "gin/system/util""github.com/gin-gonic/gin""log" )func Login(c *gin.Contex…

三维测量与建模笔记 - 2.2 射影几何

教程中H矩阵写的有问题&#xff0c;上图中H矩阵应该是&#xff08;n1) x (m1) 共点不变性,下图中黄色方块标记的点&#xff0c;在射影变换前后&#xff0c;虽然直线的形状有所变化&#xff0c;但仍然相交于同一个点。 共线不变性&#xff0c;下图黄色标记的两个点&#xff0c;在…

操作系统(10) (并发(2)------基于软件/硬件/操作系统层面解决两个进程之间的临界区问题/抢占式/非抢占式内核)

目录 1. 基于软件层面(Petersons Solution) Petersons Solution 满足三个要求: 好处: 缺点 2. 基于硬件层面 1. Disabling Interrupts (禁用中断) 概念解释&#xff1a; 代码框架&#xff1a; 要求&#xff1a; 禁用中断的好处与问题&#xff1a; 2. Test and Set Lock (…

系统架构设计师-未来信息综合技术(1)

目录 一、信息物理系统CPS 1、CPS体系结构 2、CPS的技术体系 3、CPS的应用场景 二、人工智能技术 1、人工智能关键技术 2、人工智能&#xff08;AI&#xff09;芯片 一、信息物理系统CPS 定义&#xff1a;CPS通过集成先进的感知、计算、通信、控制等信息技术和自动控制技术&a…

支持向量机背后的数学奥秘

一、基本概念与原理 1.1 支持向量机的定义 支持向量机是一种二分类模型&#xff0c;其核心思想是在样本空间中寻找一个超平面&#xff0c;将不同类别的样本分开。这个超平面被称为决策边界或分隔超平面。支持向量是距离决策边界最近的点&#xff0c;这些点决定了决策边界的位…

LeetCode 热题100 之 回溯1

1.全排列 思路分析1&#xff08;回溯&#xff09;&#xff1a;要生成一个不含重复数字的数组 nums 的所有可能全排列&#xff0c;我们可以使用回溯算法。这种算法通过递归的方法探索所有可能的排列组合&#xff0c;并在合适的时机进行回溯&#xff0c;确保不会遗漏任何排列。回…

「C/C++」C/C++ 之 变量作用域详解

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…