写点什么

Python 数据分析:Numpy、Pandas 高级

  • 2024-08-13
    湖南
  • 本文字数:3393 字

    阅读完需:约 11 分钟

在上一篇博文中,我们介绍了 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 + array2print(result)
复制代码

高级索引

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

# 布尔索引array = np.array([1, 2, 3, 4, 5])bool_index = array > 3print(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 npimport 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)}
# 创建DataFramedf = 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.nandf = df.fillna(df['Weight'].mean())
print("\n处理缺失值后数据:")print(df)
# 保存处理后的数据到新的CSV文件df.to_csv('processed_data.csv', index=False
复制代码

3.3 运行结果

数据前几行:      Name  Age  Height  Weight  Score0      Tom   26     189    86.0     911    Jerry   22     176    65.0     962    Alice   25     158    78.8     853      Bob   29     155    98.0     774  Charlie   28     151    66.0     94
数据统计: Age Height Weight Scorecount 5.000000 5.000000 5.000000 5.000000mean 26.000000 165.800000 78.800000 88.600000std 2.915476 16.445498 14.135
936 7.396683min 22.000000 151.000000 65.000000 77.00000025% 25.000000 155.000000 66.000000 85.00000050% 26.000000 158.000000 86.000000 91.00000075% 28.000000 176.000000 88.000000 94.000000max 29.000000 189.000000 98.000000 96.000000
按年龄分组并计算平均值: Height Weight Score BMIAge 22 176.0 65.0 96.0 20.99136425 158.0 78.8 85.0 31.58523126 189.0 86.0 91.0 24.08368128 151.0 66.0 94.0 28.89914529 155.0 98.0 77.0 40.834151
添加BMI列后的数据: Name Age Height Weight Score BMI0 Tom 26 189 86.0 91 24.0836811 Jerry 22 176 65.0 96 20.9913642 Alice 25 158 78.8 85 31.5852313 Bob 29 155 98.0 77 40.8341514 Charlie 28 151 66.0 94 28.899145
处理缺失值后数据: Name Age Height Weight Score BMI0 Tom 26 189 86.000000 91 24.0836811 Jerry 22 176 65.000000 96 20.9913642 Alice 25 158 78.800000 85 31.5852313 Bob 29 155 98.000000 77 40.8341514 Charlie 28 151 66.000000 94 28.899145
复制代码

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


作者:Rjdeng

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

用户头像

欢迎关注,一起学习,一起交流,一起进步 2020-06-14 加入

公众号:做梦都在改BUG

评论

发布
暂无评论
Python数据分析:Numpy、Pandas高级_Python_我再BUG界嘎嘎乱杀_InfoQ写作社区