人工智能之数据分析 Pandas:第三章 DataFrame

人工智能之数据分析 Pandas

第三章 DataFrame


文章目录

  • [人工智能之数据分析 Pandas](#人工智能之数据分析 Pandas)
  • 前言
  • [一、什么是 DataFrame?](#一、什么是 DataFrame?)
  • [二、DataFrame 的核心特性](#二、DataFrame 的核心特性)
  • [三、创建 DataFrame 的 6 种主要方式](#三、创建 DataFrame 的 6 种主要方式)
    • [1. 从字典(最常见)](#1. 从字典(最常见))
    • [2. 从列表的列表(嵌套列表)](#2. 从列表的列表(嵌套列表))
    • [3. 从 Series 字典](#3. 从 Series 字典)
    • [4. 从 NumPy 数组](#4. 从 NumPy 数组)
    • [5. 从外部文件(实际中最常用)](#5. 从外部文件(实际中最常用))
    • [6. 创建空 DataFrame](#6. 创建空 DataFrame)
  • [四、DataFrame 的关键属性](#四、DataFrame 的关键属性)
  • 五、数据访问与选择(重点!)
    • [1. 选择列](#1. 选择列)
    • [2. 选择行](#2. 选择行)
    • [3. 同时选择行列](#3. 同时选择行列)
    • [4. 布尔索引(条件筛选)](#4. 布尔索引(条件筛选))
  • 六、常用数据操作
    • [1. 添加列](#1. 添加列)
    • [2. 删除行/列](#2. 删除行/列)
    • [3. 重命名](#3. 重命名)
    • [4. 排序](#4. 排序)
    • [5. 缺失值处理](#5. 缺失值处理)
    • [6. 描述性统计](#6. 描述性统计)
  • 七、高级功能概览
  • 八、注意事项与最佳实践
  • 九、总结
  • 后续
  • 资料关注

前言

DataFramepandas 中最常用的二维数据结构,用于处理二维表格型数据 (类似 Excel 表格或 SQL 表)。它是数据分析、清洗、探索和建模的基础工具。本文从定义、结构、创建方式、常用操作、高级功能等方面进行全面而深入的介绍。


一、什么是 DataFrame?

DataFrame 是一个带标签的二维异构数据结构,具有以下特点:

  • 行(Rows):每行代表一个观测/记录(如一个人、一次交易)。
  • 列(Columns):每列代表一个变量/特征(如姓名、年龄、收入),各列可为不同数据类型(int, float, str, bool 等)。
  • 索引(Index):行标签,默认为从 0 开始的整数,但可自定义(如日期、ID)。
  • 列名(Columns):列的标签,必须唯一(默认为字符串,但也可为其他可哈希类型)。

✅ 简单理解:DataFrame = 多个共享同一索引的 Series 组成的字典


二、DataFrame 的核心特性

特性 说明
二维表格结构 行 × 列,支持混合数据类型
自动对齐 运算时按行索引和列名自动对齐
缺失值支持 使用 NaN 表示缺失,不影响整体结构
灵活索引 支持 .loc(标签)、.iloc(位置)、布尔索引等多种访问方式
可扩展性强 易于添加/删除行、列,支持合并、连接、重塑等操作
与 NumPy 兼容 可通过 .values 获取底层 NumPy 数组

三、创建 DataFrame 的 6 种主要方式

1. 从字典(最常见)

python 复制代码
import pandas as pd

data = {
    '姓名': ['张三', '李四', '王五'],
    '年龄': [25, 30, 35],
    '城市': ['北京', '上海', '广州']
}
df = pd.DataFrame(data)

⚠️ 字典的 key → 列名,value(列表/数组)→ 列数据,长度必须一致。

2. 从列表的列表(嵌套列表)

python 复制代码
data = [['张三', 25, '北京'],
        ['李四', 30, '上海'],
        ['王五', 35, '广州']]
df = pd.DataFrame(data, columns=['姓名', '年龄', '城市'])

3. 从 Series 字典

python 复制代码
s1 = pd.Series([25, 30, 35], name='年龄')
s2 = pd.Series(['北京', '上海', '广州'], name='城市')
df = pd.DataFrame({'年龄': s1, '城市': s2})

4. 从 NumPy 数组

python 复制代码
import numpy as np
arr = np.random.randn(3, 2)
df = pd.DataFrame(arr, columns=['A', 'B'], index=['x', 'y', 'z'])

5. 从外部文件(实际中最常用)

python 复制代码
# CSV
df = pd.read_csv('data.csv')

# Excel
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# JSON
df = pd.read_json('data.json')

6. 创建空 DataFrame

python 复制代码
df_empty = pd.DataFrame()
# 或指定列
df_empty = pd.DataFrame(columns=['姓名', '年龄'])

四、DataFrame 的关键属性

属性 说明 示例
.index 行索引 df.index
.columns 列名 df.columns
.values 数据(NumPy 数组) df.values
.shape 形状 (行数, 列数) df.shape(3, 3)
.dtypes 每列的数据类型 df.dtypes
.size 总元素数 df.size
.ndim 维度(总是 2) df.ndim
.T 转置 df.T

五、数据访问与选择(重点!)

1. 选择列

python 复制代码
df['姓名']        # 返回 Series
df[['姓名', '年龄']]  # 返回 DataFrame(注意双括号)

2. 选择行

  • 按标签(推荐)

    python 复制代码
    df.loc[0]         # 第 0 行(标签为 0)
    df.loc[0:1]       # 标签切片(包含末端)
  • 按位置(整数索引)

    python 复制代码
    df.iloc[0]        # 第 0 行(位置)
    df.iloc[0:2]      # 位置切片(不包含末端)

3. 同时选择行列

python 复制代码
df.loc[0, '姓名']           # 单个值
df.loc[0:1, ['姓名', '年龄']]  # 子集
df.iloc[0:2, 0:2]          # 位置方式

4. 布尔索引(条件筛选)

python 复制代码
df[df['年龄'] > 30]                # 年龄大于 30 的行
df[(df['年龄'] > 25) & (df['城市'] == '上海')]  # 多条件(注意括号和 &)

六、常用数据操作

1. 添加列

python 复制代码
df['性别'] = ['男', '女', '男']     # 直接赋值
df['年龄_明年'] = df['年龄'] + 1   # 基于现有列计算

2. 删除行/列

python 复制代码
df.drop('姓名', axis=1)      # 删除列(axis=1)
df.drop(0, axis=0)           # 删除第 0 行(axis=0)
# 默认返回新对象,加 inplace=True 可原地修改

3. 重命名

python 复制代码
df.rename(columns={'姓名': '名字'}, inplace=True)
df.rename(index={0: '第一行'}, inplace=True)

4. 排序

python 复制代码
df.sort_values('年龄')        # 按"年龄"升序
df.sort_values(['城市', '年龄'], ascending=[True, False])

5. 缺失值处理

python 复制代码
df.isnull()          # 判断是否为 NaN
df.dropna()          # 删除含 NaN 的行
df.fillna(0)         # 用 0 填充 NaN

6. 描述性统计

python 复制代码
df.describe()        # 数值列的统计摘要(均值、标准差、分位数等)
df['年龄'].mean()    # 单列均值

七、高级功能概览

功能 方法/说明
分组聚合 df.groupby('城市')['年龄'].mean()
透视表 pd.pivot_table(df, values='年龄', index='城市', aggfunc='mean')
合并数据 pd.concat([df1, df2]), pd.merge(df1, df2, on='key')
重塑数据 df.melt(), df.pivot(), df.stack(), df.unstack()
时间序列 支持 DatetimeIndex,可进行重采样(resample)、移动窗口(rolling)等
apply 函数 df.apply(lambda x: x.max() - x.min())(按列/行应用函数)

八、注意事项与最佳实践

  1. 避免链式赋值警告

    df[df['年龄']>30]['城市'] = '深圳' → 可能无效

    ✅ 使用 .locdf.loc[df['年龄']>30, '城市'] = '深圳'

  2. 复制 vs 视图

    • df2 = df 是引用(修改 df2 会影响 df)
    • df2 = df.copy() 创建独立副本
  3. 性能优化

    • 避免在循环中逐行操作,优先使用向量化运算
    • 对大文件使用 chunksize 分块读取
  4. 内存管理

    • 使用 df.info() 查看内存占用
    • 可通过 astype() 降低数据类型精度(如 int64 → int32)

九、总结

DataFrame 是 Pandas 的灵魂

  • 它是结构化数据处理的"瑞士军刀";
  • 结合 Series、索引、向量化操作,实现高效、简洁的数据分析;
  • 几乎所有真实场景的数据(CSV、数据库、API 返回)最终都会转为 DataFrame 处理。

后续

python过渡项目部分代码已经上传至gitee,后续会逐步更新。

资料关注

公众号:咚咚王

gitee:https://gitee.com/wy18585051844/ai_learning

《Python编程:从入门到实践》

《利用Python进行数据分析》

《算法导论中文第三版》

《概率论与数理统计(第四版) (盛骤) 》

《程序员的数学》

《线性代数应该这样学第3版》

《微积分和数学分析引论》

《(西瓜书)周志华-机器学习》

《TensorFlow机器学习实战指南》

《Sklearn与TensorFlow机器学习实用指南》

《模式识别(第四版)》

《深度学习 deep learning》伊恩·古德费洛著 花书

《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》

《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》

《自然语言处理综论 第2版》

《Natural-Language-Processing-with-PyTorch》

《计算机视觉-算法与应用(中文版)》

《Learning OpenCV 4》

《AIGC:智能创作时代》杜雨+&+张孜铭

《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》

《从零构建大语言模型(中文版)》

《实战AI大模型》

《AI 3.0》

相关推荐
新加坡内哥谈技术39 分钟前
OpenAI 因 Google 逼近而宣布“红色警戒”
人工智能
明月(Alioo)39 分钟前
机器学习入门,微积分之导数概念
人工智能·机器学习
薛定e的猫咪39 分钟前
中国版 ReadmeX + 海外爆款 Zread.ai:两款 AI 工具重构开源项目探索方式,一键解析GitHub项目,生成超详细技术文档。
人工智能·重构·开源
跨境摸鱼41 分钟前
AI 赋能!亚马逊竞争情报的“重构式”升级,破解竞品迷局
人工智能·矩阵·重构·跨境电商·亚马逊·防关联
AI即插即用1 小时前
即插即用系列 | CVPR 2024 ABC-Attention:基于双线性相关注意力的红外小目标检测
图像处理·人工智能·深度学习·目标检测·计算机视觉·cnn·视觉检测
AI即插即用1 小时前
即插即用系列 | WACV 2025 SvANet:专为极小目标(<1%)设计的尺度变化注意力网络,医学图像分割新SOTA!
人工智能·深度学习·神经网络·目标检测·计算机视觉·cnn·视觉检测
秋邱1 小时前
AR + 离线 AI 实战:YOLOv9+TensorFlow Lite 实现移动端垃圾分类识别
开发语言·前端·数据库·人工智能·python·html
Sheffi661 小时前
大语言模型 (LLM) 在 App 中的集成方式
人工智能·语言模型·自然语言处理
Swift社区1 小时前
在 Swift 中使用 Image Playground 生成 AI 图像:完整实战指南
开发语言·人工智能·swift