欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > Pandas 数据分析基础操作:从创建到统计的实用指南

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

2024/12/3 2:24:52 来源:https://blog.csdn.net/u014394049/article/details/143303349  浏览:    关键词: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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com