Python数据分析:Numpy、Pandas高级

简介: 在上一篇博文中,我们介绍了Python数据分析中NumPy和Pandas的基础知识。本文将深入探讨NumPy和Pandas的高级功能,并通过一个综合详细的例子展示这些高级功能的应用。

在上一篇博文中,我们介绍了Python数据分析中NumPy和Pandas的基础知识。本文将深入探讨NumPy和Pandas的高级功能,并通过一个综合详细的例子展示这些高级功能的应用。

一、NumPy高级功能

1.1 高级数组操作

数组的广播

广播机制使得NumPy能够对不同形状的数组进行算术运算。这是一种方便且高效的数组运算方式。

import numpy as np
array1 = np.array([1, 2, 3])
array2 = np.array([[4], [5], [6]])
result = array1 + array2
print(result)

高级索引

NumPy支持布尔索引和花式索引,可以用来从数组中提取子集。

# 布尔索引
array = np.array([1, 2, 3, 4, 5])
bool_index = array > 3
print(array[bool_index])
# 花式索引
array = np.array([10, 20, 30, 40, 50])
index = [0, 2, 4]
print(array[index])

1.2 数学和统计函数

NumPy提供了丰富的数学和统计函数,可以对数组进行各种数学运算和统计分析。

array = np.array([1, 2, 3, 4, 5])
# 求和
print(np.sum(array))
# 均值
print(np.mean(array))
# 标准差
print(np.std(array))
# 最大值和最小值
print(np.max(array))
print(np.min(array))

1.3 线性代数

NumPy的线性代数模块numpy.linalg提供了矩阵和向量的线性代数运算功能。

# 矩阵乘法
matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])
result = np.dot(matrix1, matrix2)
print(result)
# 矩阵求逆
inverse_matrix = np.linalg.inv(matrix1)
print(inverse_matrix)
# 特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(matrix1)
print(eigenvalues)
print(eigenvectors)

1.4 随机数生成

NumPy的random模块提供了生成各种随机数的功能。

# 生成均匀分布的随机数
uniform_random = np.random.rand(3, 3)
print(uniform_random)
# 生成正态分布的随机数
normal_random = np.random.randn(3, 3)
print(normal_random)
# 生成随机整数
random_integers = np.random.randint(1, 10, size=(3, 3))
print(random_integers)

二、Pandas高级功能

2.1 高级数据结构操作

多级索引

Pandas支持多级索引(层次索引),可以用于处理高维度的数据。

import pandas as pd
data = {
    'Year': [2020, 2020, 2021, 2021],
    'City': ['New York', 'Los Angeles', 'New York', 'Los Angeles'],
    'Population': [8419600, 3980400, 8399000, 3967000]
}
df = pd.DataFrame(data)
df.set_index(['Year', 'City'], inplace=True)
print(df)

数据透视表

数据透视表用于汇总和分析数据,是数据分析中的常用工具。

data = {
    'Name': ['Tom', 'Jerry', 'Tom', 'Jerry'],
    'Subject': ['Math', 'Math', 'Science', 'Science'],
    'Score': [85, 92, 78, 88]
}
df = pd.DataFrame(data)
pivot_table = pd.pivot_table(df, values='Score', index='Name', columns='Subject')
print(pivot_table)

2.2 高级数据清洗

Pandas提供了许多高级的数据清洗功能,可以处理更复杂的数据清洗任务。

# 数据替换
df = pd.DataFrame({'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8]})
df.replace({1: 100, 2: 200}, inplace=True)
print(df)
# 处理重复值
df = pd.DataFrame({'A': [1, 2, 2, 4], 'B': [5, 6, 6, 8]})
df.drop_duplicates(inplace=True)
print(df)
# 分割和提取
df = pd.DataFrame({'Full Name': ['Tom Smith', 'Jerry Lee']})
df[['First Name', 'Last Name']] = df['Full Name'].str.split(' ', expand=True)
print(df)

2.3 时间序列分析

Pandas的时间序列功能可以处理和分析时间序列数据。

# 创建时间序列
dates = pd.date_range('20230101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df)
# 重采样
df_resampled = df.resample('M').mean()
print(df_resampled)

2.4 合并和连接

Pandas提供了多种合并和连接数据的方法,可以方便地进行数据整合。

df1 = pd.DataFrame({'Key': ['A', 'B', 'C'], 'Value1': [1, 2, 3]})
df2 = pd.DataFrame({'Key': ['A', 'B', 'D'], 'Value2': [4, 5, 6]})
# 合并
df_merged = pd.merge(df1, df2, on='Key', how='inner')
print(df_merged)
# 连接
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'], 'B': ['B0', 'B1', 'B2']})
df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2'], 'D': ['D0', 'D1', 'D2']})
df_concated = pd.concat([df1, df2], axis=1)
print(df_concated)

三、综合示例

以下是一个综合详细的示例,演示了如何使用NumPy和Pandas的高级功能进行数据处理和分析。该示例将生成一个包含随机数据的CSV文件,然后读取该文件并进行数据分析。

3.1 生成随机数据并保存为CSV文件

import numpy as np
import pandas as pd
# 设置随机种子
np.random.seed(0)
# 生成随机数据
data = {
    'Name': ['Tom', 'Jerry', 'Alice', 'Bob', 'Charlie'],
    'Age': np.random.randint(18, 30, 5),
    'Height': np.random.randint(150, 200, 5),
    'Weight': np.random.randint(50, 100, 5),
    'Score': np.random.randint(60, 100, 5)
}
# 创建DataFrame
df = pd.DataFrame(data)
# 保存为CSV文件
df.to_csv('random_data.csv', index=False)

3.2 读取CSV文件并进行数据分析

# 读取CSV文件
df = pd.read_csv('random_data.csv')
# 显示前几行数据
print("数据前几行:")
print(df.head())
# 统计数据
print("\n数据统计:")
print(df.describe())
# 按年龄分组并计算平均值
print("\n按年龄分组并计算平均值:")
print(df.groupby('Age').mean())
# 添加一列BMI(Body Mass Index)
df['BMI'] = df['Weight'] / (df['Height'] / 100) ** 2
# 显示计算后的数据
print("\n添加BMI列后的数据:")
print(df)
# 处理缺失值(模拟缺失值处理)
df.loc[2, 'Weight'] = np.nan
df = df.fillna(df['Weight'].mean())
print("\n处理缺失值后数据:")
print(df)
# 保存处理后的数据到新的CSV文件
df.to_csv('processed_data.csv', index=False

3.3 运行结果

数据前几行:
      Name  Age  Height  Weight  Score
0      Tom   26     189    86.0     91
1    Jerry   22     176    65.0     96
2    Alice   25     158    78.8     85
3      Bob   29     155    98.0     77
4  Charlie   28     151    66.0     94
数据统计:
             Age      Height      Weight      Score
count   5.000000    5.000000    5.000000   5.000000
mean   26.000000  165.800000   78.800000  88.600000
std     2.915476   16.445498   14.135
936   7.396683
min    22.000000  151.000000   65.000000  77.000000
25%    25.000000  155.000000   66.000000  85.000000
50%    26.000000  158.000000   86.000000  91.000000
75%    28.000000  176.000000   88.000000  94.000000
max    29.000000  189.000000   98.000000  96.000000
按年龄分组并计算平均值:
      Height  Weight  Score       BMI
Age                                    
22    176.0    65.0   96.0  20.991364
25    158.0    78.8   85.0  31.585231
26    189.0    86.0   91.0  24.083681
28    151.0    66.0   94.0  28.899145
29    155.0    98.0   77.0  40.834151
添加BMI列后的数据:
      Name  Age  Height  Weight  Score        BMI
0      Tom   26     189    86.0     91  24.083681
1    Jerry   22     176    65.0     96  20.991364
2    Alice   25     158    78.8     85  31.585231
3      Bob   29     155    98.0     77  40.834151
4  Charlie   28     151    66.0     94  28.899145
处理缺失值后数据:
      Name  Age  Height     Weight  Score        BMI
0      Tom   26     189  86.000000     91  24.083681
1    Jerry   22     176  65.000000     96  20.991364
2    Alice   25     158  78.800000     85  31.585231
3      Bob   29     155  98.000000     77  40.834151
4  Charlie   28     151  66.000000     94  28.899145

通过上述综合示例,我们展示了如何使用NumPy和Pandas的高级功能进行数据生成、读取、处理和分析。这些高级功能使得数据分析更加高效和灵活,帮助我们更好地理解和利用数据。


作者:Rjdeng

链接:https://juejin.cn/post/7399661995090247730

相关文章
|
2月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
277 0
|
2月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
441 0
|
3月前
|
数据采集 数据可视化 数据挖掘
Python数据分析实战:Pandas处理结构化数据的核心技巧
在数据驱动时代,结构化数据是分析决策的基础。Python的Pandas库凭借其高效的数据结构和丰富的功能,成为处理结构化数据的利器。本文通过真实场景和代码示例,讲解Pandas的核心操作,包括数据加载、清洗、转换、分析与性能优化,帮助你从数据中提取有价值的洞察,提升数据处理效率。
201 3
|
5月前
|
数据采集 数据可视化 搜索推荐
Python数据分析全流程指南:从数据采集到可视化呈现的实战解析
在数字化转型中,数据分析成为企业决策核心,而Python凭借其强大生态和简洁语法成为首选工具。本文通过实战案例详解数据分析全流程,涵盖数据采集、清洗、探索、建模、可视化及自动化部署,帮助读者掌握从数据到业务价值的完整技能链。
630 0
|
2月前
|
数据可视化 大数据 关系型数据库
基于python大数据技术的医疗数据分析与研究
在数字化时代,医疗数据呈爆炸式增长,涵盖患者信息、检查指标、生活方式等。大数据技术助力疾病预测、资源优化与智慧医疗发展,结合Python、MySQL与B/S架构,推动医疗系统高效实现。
|
3月前
|
数据可视化 数据挖掘 大数据
基于python大数据的水文数据分析可视化系统
本研究针对水文数据分析中的整合难、分析单一和可视化不足等问题,提出构建基于Python的水文数据分析可视化系统。通过整合多源数据,结合大数据、云计算与人工智能技术,实现水文数据的高效处理、深度挖掘与直观展示,为水资源管理、防洪减灾和生态保护提供科学决策支持,具有重要的应用价值和社会意义。
|
4月前
|
存储 数据挖掘 大数据
基于python大数据的用户行为数据分析系统
本系统基于Python大数据技术,深入研究用户行为数据分析,结合Pandas、NumPy等工具提升数据处理效率,利用B/S架构与MySQL数据库实现高效存储与访问。研究涵盖技术背景、学术与商业意义、国内外研究现状及PyCharm、Python语言等关键技术,助力企业精准营销与产品优化,具有广泛的应用前景与社会价值。
|
4月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
399 0
|
2月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
344 0
|
2月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
183 0

推荐镜像

更多