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

Pandas 和 NumPy 使用文档整理

Pandas 和 NumPy 使用文档整理

1. NumPy 核心功能

1.1 数组创建

import numpy as np# 从列表创建
arr = np.array([1, 2, 3])# 特殊数组
zeros = np.zeros((3, 4))  # 全0数组
ones = np.ones((2, 3))    # 全1数组
empty = np.empty((2, 2))  # 未初始化数组
full = np.full((2, 2), 7) # 填充指定值
arange = np.arange(10)    # 类似range
linspace = np.linspace(0, 1, 5)  # 线性间隔数组
random_arr = np.random.rand(3, 3)  # 随机数组
identity = np.eye(3)      # 单位矩阵

1.2 数组属性

arr = np.array([[1, 2, 3], [4, 5, 6]])arr.shape    # (2, 3) - 数组形状
arr.ndim     # 2 - 数组维度
arr.size     # 6 - 元素总数
arr.dtype    # dtype('int64') - 数据类型
arr.itemsize # 8 - 每个元素字节大小

1.3 数组操作

# 索引和切片
arr = np.arange(10)
arr[2]       # 索引
arr[2:5]     # 切片
arr[2:5] = 9 # 批量赋值# 多维数组索引
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
arr2d[0, 1]  # 2
arr2d[:, 1]  # 第2列 [2, 5]# 布尔索引
arr[arr > 5] # 大于5的元素# 形状操作
arr.reshape((2, 5))  # 改变形状
arr.flatten()        # 展平为一维
arr.T                # 转置# 合并与分割
np.concatenate([arr1, arr2])
np.vstack((arr1, arr2))  # 垂直堆叠
np.hstack((arr1, arr2))  # 水平堆叠
np.split(arr, 3)         # 分割数组

1.4 数学运算

# 基本运算
arr1 + arr2   # 加法
arr1 - arr2   # 减法
arr1 * arr2   # 乘法(元素级)
arr1 / arr2   # 除法(元素级)
arr1 @ arr2   # 矩阵乘法
np.dot(arr1, arr2)  # 点积# 通用函数(ufunc)
np.sqrt(arr)     # 平方根
np.exp(arr)      # 指数
np.sin(arr)      # 正弦
np.log(arr)      # 对数
np.abs(arr)      # 绝对值
np.round(arr, 2) # 四舍五入# 统计方法
arr.sum()        # 总和
arr.mean()       # 平均值
arr.std()        # 标准差
arr.var()        # 方差
arr.min()        # 最小值
arr.max()        # 最大值
arr.argmin()     # 最小值的索引
arr.argmax()     # 最大值的索引
np.percentile(arr, 50)  # 百分位数

2. Pandas 核心功能

2.1 数据结构

import pandas as pd# Series - 一维带标签数组
s = pd.Series([1, 3, 5, np.nan, 6, 8])pd.Series([4,5,6,7,8])  # np.array([11,22,33,44,55])  
0    4
1    5
2    6
3    7
4    8
dtype: int64pd.Series([4,5,6,7,8],index=['a','b','c','d','e'])  # index参数指定行标签
a    4
b    5
c    6
d    7
e    8
dtype: int64pd.Series({"a":1,"b":2})  # 字典的key会自动作为行标签 value自动作为数据pd.Series(111,index=['a','b','c'])# DataFrame - 二维表格数据结构
df = pd.DataFrame({'A': 1.0,'B': pd.Timestamp('20230101'),'C': pd.Series(1, index=list(range(4)), dtype='float32'),'D': np.array([3] * 4, dtype='int32'),'E': pd.Categorical(["test", "train", "test", "train"]),'F': 'foo'
})# 多种创建方式
pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
# 字典的键会作为表格的列字段名称
# 字典的值会作为表格的真实数据项pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3],index=['b','a','c'])
})
# Series指定行标签 则展示行标签
pd.DataFrame(np.array([[10,20],[30,40]]),index=['a','b'],columns=['c1','c2'])
# index自定义行标签
# columns自定义列字段名称pd.DataFrame([np.arange(1,8),np.arange(11,18)])
# 如果没有行标签和列字段名称 那么统一使用从0开始的索引值s1 = pd.Series(np.arange(1,9,2))
s2 = pd.Series(np.arange(2,10,2))
s3 = pd.Series(np.arange(5,7),index=[1,2])
pd.DataFrame({'c1':s1,'c2':s2,'c3':s3})

2.2 数据查看与选择

# 查看数据
df.head()       # 前5行
df.tail(3)      # 后3行
df.index        # 查看索引
df.columns      # 查看列名
df.describe()   # 统计摘要
df.info()       # 数据信息# 选择数据
df['A']         # 选择列
df[0:3]         # 选择行
df.loc[0]       # 按标签选择行
df.loc[:, ['A', 'B']]  # 按标签选择列
df.iloc[0]      # 按位置选择行
df.iloc[:, 1:3] # 按位置选择列
df[df.A > 0]    # 布尔索引
df[df['E'].isin(['train'])]  # isin过滤

2.3 数据操作

# 缺失数据处理
df.dropna()     # 删除缺失值
df.fillna(0)    # 填充缺失值
df.isna()       # 检查缺失值# 数据合并
pd.concat([df1, df2])          # 连接
pd.merge(df1, df2, on='key')   # 合并
df1.join(df2)                  # 连接# 分组聚合
df.groupby('E').sum()          # 分组求和
df.groupby(['E', 'F']).mean()  # 多级分组# 排序
df.sort_values(by='B')         # 按值排序
df.sort_index(ascending=False) # 按索引排序# 应用函数
df.apply(np.sum)               # 应用函数
df.apply(lambda x: x.max() - x.min())  # lambda函数

2.4 时间序列处理

# 时间序列
dates = pd.date_range('20230101', periods=6)
ts = pd.Series(np.random.randn(6), index=dates)# 重采样
ts.resample('M').mean()        # 按月重采样# 移动窗口
ts.rolling(window=3).mean()    # 移动平均

2.5 输入输出

# 读取数据
pd.read_csv('file.csv')        # 读取CSV
pd.read_excel('file.xlsx')     # 读取Excel
pd.read_sql('SELECT * FROM table', con)  # 读取SQL# 保存数据
df.to_csv('output.csv')        # 保存为CSV
df.to_excel('output.xlsx')    # 保存为Excel
df.to_sql('table_name', con)  # 保存到SQL

3. Pandas 和 NumPy 结合使用

# DataFrame 和 NumPy 数组转换
arr = df.values              # DataFrame 转 NumPy 数组
df = pd.DataFrame(arr)       # NumPy 数组 转 DataFrame# 使用 NumPy 函数处理 Pandas 数据
df.apply(np.sqrt)            # 对每列应用平方根
np.mean(df['A'])             # 计算列的平均值# 使用 Pandas 处理 NumPy 结果
result = np.random.randn(1000)
pd.Series(result).describe()  # 使用 Pandas 描述统计

4. 性能优化技巧

# 向量化操作优于循环
# 不好
for i in range(len(df)):df.iloc[i] = df.iloc[i] * 2# 好
df = df * 2# 使用 eval() 进行表达式求值
df.eval('A + B')  # 比 df.A + df.B 更快# 使用 query() 进行高效过滤
df.query('A > 0 & B < 0')# 使用 category 类型节省内存
df['category_col'] = df['category_col'].astype('category')# 使用 chunksize 处理大文件
for chunk in pd.read_csv('large_file.csv', chunksize=10000):process(chunk)

5. 常用实用函数

5.1 Pandas 实用函数

# 数据透视表
pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])# 交叉表
pd.crosstab(df['A'], df['B'])# 虚拟变量/独热编码
pd.get_dummies(df['category_col'])# 时间差计算
df['time_diff'] = df['end_time'] - df['start_time']# 值计数
df['col'].value_counts()# 去重
df.drop_duplicates()# 替换值
df.replace({1: 'one', 2: 'two'})# 分箱
pd.cut(df['age'], bins=[0, 18, 35, 60, 100])

5.2 NumPy 实用函数

# 数组拼接
np.stack([arr1, arr2])      # 沿新轴堆叠
np.vstack([arr1, arr2])     # 垂直堆叠
np.hstack([arr1, arr2])     # 水平堆叠# 数组分割
np.split(arr, 3)            # 平均分割
np.vsplit(arr, 2)           # 垂直分割
np.hsplit(arr, 2)           # 水平分割# 广播规则
arr1 = np.ones((3, 4))
arr2 = np.arange(4)
arr1 + arr2  # 广播# 高级索引
arr[[1, 3, 5]]              # 花式索引
arr[arr > 5]                # 布尔索引# 多项式计算
np.polyfit(x, y, 2)         # 多项式拟合
np.polyval([1, 2, 3], 5)    # 多项式求值

文章转载自:
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://www.dtcms.com/a/281723.html

相关文章:

  • 大宗现货电子盘交易系统核心功能代码解析
  • QT6 源,六章事件系统(8)QEvent 的孙子类:QEnterEvent 光标进入
  • 无穿戴动捕如何凭借摄像头视觉识别算法,赋能高校专业教学革新?
  • python进阶
  • 145-变分模态分解VMD与平稳小波变换SWT信号降噪算法实现!
  • 4G模块 A7680通过MQTT协议连接到onenet(新版)
  • WebAPIs基本认知,DOM基础介绍
  • 基于Springboot+UniApp+Ai实现模拟面试小工具五:权限校验参数校验及日志功能实现
  • Ubuntu 22.04 安装 mysql-server与 postgreSQL 服务端
  • el-tooltip 快速滚动的时候出现残影如何解决 vue3
  • 30.安卓逆向2-frida hook技术-hook So文件(获取app加载的所有模块、导入函数、导出函数、hook SO函数)
  • 区块链发展史全景长图
  • 强化学习Reinforcement Learning
  • 基于Python的图像文字识别系统
  • Glide双内存缓存加载机制详细介绍
  • K型热电偶电动势以及温度对照表
  • 驱动开发系列61- Vulkan 驱动实现-SPIRV到HW指令的实现过程(2)
  • [Science]论文 视黄素与细胞修复
  • 2025-07-15通过边缘线检测图像里的主体有没有出血
  • IMU 能为无人机提供什么数据?
  • 【论文阅读】A Survey on Knowledge-Oriented Retrieval-Augmented Generation(3)
  • 移动端字体适配
  • 谷歌浏览器控制台如何切换中文
  • StampedLock分析
  • 链表的 哑结点的本质
  • Python 程序设计讲义(1):PyCharm 安装教程
  • WebView JSBridge 无响应问题排查实录 全流程定位桥接调用失效
  • 深度学习·目标检测和语义分割基础
  • 77、【OS】【Nuttx】【启动】caller-saved 和 callee-saved 示例:栈指针和帧指针(上)
  • Qt图形视图框架5-状态机框架