当前位置: 首页 > article >正文

详细介绍pandas 与 numpy 在python中结合用法

PandasNumPy 是 Python 数据科学领域中最重要的两个库。Pandas 构建于 NumPy 之上,它们紧密结合,互为补充,能共同处理复杂的数据分析任务。NumPy 提供了高效的数组操作,而 Pandas 提供了面向数据分析的高级功能。以下是 PandasNumPy 结合使用时的常见场景和操作。

1. 使用 NumPy 创建 Pandas 对象

Pandas 中的 SeriesDataFrame 可以直接使用 NumPy 数组或函数来创建。Pandas 本质上是对 NumPy 数组的一种封装,因此可以将 NumPy 数据直接转换为 Pandas 数据结构。

a) 用 NumPy 数组创建 Pandas Series
import numpy as np
import pandas as pd

# 使用NumPy创建一个数组
np_array = np.array([10, 20, 30, 40])

# 将NumPy数组转换为Pandas的Series
s = pd.Series(np_array)
print(s)
# 输出:
# 0    10
# 1    20
# 2    30
# 3    40
# dtype: int64
b) 用 NumPy 数组创建 Pandas DataFrame
# 使用NumPy创建一个二维数组
np_2d_array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 将NumPy二维数组转换为Pandas的DataFrame
df = pd.DataFrame(np_2d_array, columns=['A', 'B', 'C'])
print(df)
# 输出:
#    A  B  C
# 0  1  2  3
# 1  4  5  6
# 2  7  8  9

2. PandasNumPy 数据结构的互相转换

a) Pandas 对象转换为 NumPy 数组

Pandas DataFrameSeries 可以很方便地转换为 NumPy 数组,以进行更高效的数值计算。

# 将DataFrame转换为NumPy数组
df_to_np = df.values
print(df_to_np)
# 输出:
# [[1 2 3]
#  [4 5 6]
#  [7 8 9]]
b) Series 转换为 NumPy 数组
# 将Series转换为NumPy数组
s_to_np = s.values
print(s_to_np)
# 输出: [10 20 30 40]

通过将 Pandas 数据转换为 NumPy 数组,我们可以借助 NumPy 的强大数组计算能力,快速进行矩阵运算、广播等操作。

3. NumPy 数学函数与 Pandas 的结合

NumPy 中的大部分数学函数和统计函数可以直接应用于 Pandas 数据结构上,Pandas 会自动将这些函数广播到各个元素上。

a) 应用 NumPy 数学函数到 Pandas 对象
# 使用NumPy的sqrt函数
df_sqrt = np.sqrt(df)
print(df_sqrt)
# 输出:
#          A         B         C
# 0  1.000000  1.414214  1.732051
# 1  2.000000  2.236068  2.449490
# 2  2.645751  2.828427  3.000000
b) 使用 NumPywhere 函数进行条件选择

NumPywhere() 函数可以根据条件对 Pandas 数据进行筛选或条件赋值。

# 使用NumPy的where进行条件选择
df_where = np.where(df > 4, 'High', 'Low')
print(df_where)
# 输出:
# [['Low' 'Low' 'Low']
#  ['Low' 'High' 'High']
#  ['High' 'High' 'High']]
c) 使用 NumPy 的聚合函数

NumPy 的聚合函数(例如 sum()mean()std() 等)也可以直接应用于 Pandas 对象。

# 使用NumPy的聚合函数计算平均值
df_mean = np.mean(df)
print(df_mean)
# 输出: [4. 5. 6.]  (各列的平均值)

4. 利用 NumPy 进行高效的布尔索引和条件筛选

虽然 Pandas 自身提供了丰富的条件筛选功能,但 NumPy 的布尔索引和条件操作更加灵活,可以与 Pandas 结合进行数据处理。

# 生成布尔掩码
mask = df['A'] > 4

# 使用NumPy的布尔数组选择DataFrame中的行
filtered_df = df[mask]
print(filtered_df)
# 输出:
#    A  B  C
# 1  4  5  6
# 2  7  8  9

5. Pandas 中使用 NumPy 的随机数生成器

NumPy 的随机数生成器是处理模拟和生成随机数据的重要工具,尤其在数据分析、数据科学和机器学习中。我们可以使用 NumPy 随机函数生成数据并将其加载到 Pandas 数据结构中。

# 生成随机数并加载到DataFrame
np_random_data = np.random.randn(5, 3)
df_random = pd.DataFrame(np_random_data, columns=['Col1', 'Col2', 'Col3'])
print(df_random)
# 输出一个5x3的随机DataFrame

6. 使用 PandasNumPy 结合进行数据清理

a) 使用 NumPynan 处理缺失值

NumPy 提供了 np.nan 来表示缺失值,Pandas 可以使用这个值来标记缺失数据,并且可以使用 fillna()dropna() 等函数处理这些数据。

# 创建包含缺失值的DataFrame
df_with_nan = pd.DataFrame({
    'A': [1, 2, np.nan, 4],
    'B': [5, np.nan, np.nan, 8]
})
print(df_with_nan)

# 使用Pandas的fillna填充缺失值
df_filled = df_with_nan.fillna(0)
print(df_filled)
# 输出:
#      A    B
# 0  1.0  5.0
# 1  2.0  0.0
# 2  0.0  0.0
# 3  4.0  8.0
b) 处理无效值:使用 NumPy 来替换异常值

我们可以结合 NumPyPandas 来识别并替换无效值。例如,使用 NumPy 中的 isnan() 函数识别缺失值或异常值,并用其他数据填充。

# 将小于2的值替换为缺失值 (np.nan)
df_replaced = df.where(df > 2, np.nan)
print(df_replaced)
# 输出:
#      A    B    C
# 0  NaN  NaN  3.0
# 1  4.0  5.0  6.0
# 2  7.0  8.0  9.0

7. 利用 NumPyPandas 进行高级数据分析

通过结合 NumPyPandas,可以进行一些更复杂的计算和分析,例如矩阵运算、线性代数操作等。

a) 矩阵运算
# 创建一个随机的DataFrame
df_matrix = pd.DataFrame(np.random.rand(3, 3), columns=['A', 'B', 'C'])

# 使用NumPy的矩阵乘法
result = np.dot(df_matrix, df_matrix.T)
print(result)
# 输出:
# [[0.401 0.353 0.328]
#  [0.353 0.405 0.331]
#  [0.328 0.331 0.312]]
b) 线性代数操作
# 使用NumPy的线性代数函数计算行列式
det = np.linalg.det(df_matrix.values)
print(det)
# 输出:行列式值

8. Pandas 中的 NumPy 广播机制

NumPy 的广播机制使得向量化运算更加高效。这种机制在 Pandas 中也可以直接使用。

# 将某列乘以一个标量
df_broadcast = df * 2
print(df_broadcast)
# 输出:
#     A   B   C
# 0   2   4   6
# 1   8  10  12
# 2  14  16  18

总结

PandasNumPy 在 Python 数据分析中结合得非常紧密,NumPy 提供了底层的高效计算,Pandas 则在此基础上提供了更加高级的功能来处理和分析数据。通过结合 PandasNumPy,我们可以更灵活地执行复杂的数据分析、数据清理、条件筛选、矩阵运算等任务。


http://www.kler.cn/news/338905.html

相关文章:

  • 硬件开发笔记(三十):TPS54331电源设计(三):设计好的原理图转设计PCB布板,12V输入电路布局设计
  • 倪师学习笔记-天纪-01
  • 从prometheus监控接口读取CPU和内存信息
  • [Python] 编程入门:理解变量类型
  • python+selenium+unittest自动化测试框架
  • [C++]使用纯opencv部署yolov11-seg实例分割onnx模型
  • 【C++】模拟实现hash_table(哈希表)
  • docker minio进行数据迁移
  • MCU订阅-发布模式
  • Vue2电商平台(六)、注册登录,请求头配置token,token持久化存储;导航守卫(重点);组件内守卫、路由独享守卫
  • QtConcurrent::run 更新UI控件方式,避免主界面卡顿
  • 【数据结构与算法】LeetCode:图论
  • 获取外盘期货高频数据的方法以及量化分析
  • sql练习:计算次日留存率
  • Linux运维02:WM虚拟机安装Centos7操作系统
  • C++网络编程之TCP协议
  • Nuxt.js 应用中的 app:mounted 钩子详解
  • vue的h函数和template语法如何混用?
  • Linux——kubernetes 容器编排调度的平台
  • Redis BigKey问题