51 2

人工智能之数据分析 Pandas:第三章 DataFrame [推广有奖]

  • 0关注
  • 0粉丝

学前班

80%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
30 点
帖子
2
精华
0
在线时间
0 小时
注册时间
2018-5-31
最后登录
2018-5-31

楼主
有融就会有资 发表于 昨天 18:39 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

人工智能数据分析中的Pandas:深入理解DataFrame

前言

在数据科学领域,Pandas 是处理结构化数据的核心工具之一。其中,DataFrame 作为其最核心的二维数据结构,广泛应用于数据清洗、分析与建模过程中。它类似于电子表格或数据库表,能够高效管理带有行标签和列标签的异构数据。本文将系统性地介绍 DataFrame 的定义、特性、创建方法、关键属性、数据选取方式以及常用操作,帮助读者全面掌握这一重要工具。

一、DataFrame 概述

DataFrame 是一种带标签的二维数据容器,支持不同类型的列数据(如整数、浮点数、字符串、布尔值等),适用于存储和操作表格型数据。它的主要构成包括:

  • 行(Rows):每行代表一个独立的数据记录,例如一个人的信息或一次交易日志。
  • 列(Columns):每一列表示一个特征变量,如“姓名”、“年龄”或“城市”,且各列可拥有不同的数据类型。
  • 索引(Index):用于标识每一行,默认为从0开始的整数序列,但也可自定义为日期、ID等有意义的标签。
  • 列名(Columns):列的名称标签,通常为字符串,要求唯一,可用于快速访问数据。

? 理解提示:
DataFrame 可视为由多个共享相同索引的 Series 组成的字典结构,每个 Series 对应一列数据。

二、DataFrame 的核心特点

特性 说明
二维表格结构 具备行列结构,支持混合数据类型,适合处理真实世界中的复杂数据集
自动对齐机制 在进行算术运算或合并操作时,会根据行索引和列名自动匹配对应位置的数据
缺失值处理能力 使用
NaN
表示空值(NaN),允许存在缺失而不破坏整体结构
灵活的数据访问方式 支持基于标签的索引
.loc
、基于位置的索引
.iloc
以及布尔条件筛选
高度可扩展性 支持动态增删行列,并提供连接、合并、重塑等多种高级操作
与 NumPy 兼容性 可通过
.values
提取底层的 NumPy 数组,便于数值计算集成

三、构建 DataFrame 的六种常见方法

1. 使用字典创建(最常用方式)

通过键值对形式传入数据,字典的键作为列名,值(需为等长列表或数组)作为列内容。

import pandas as pd

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

2. 基于嵌套列表(列表的列表)

将数据以二维列表形式组织,并通过 columns 参数指定列名。

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

3. 利用 Series 字典构造

将多个 Pandas Series 作为字典的值进行组合,每个 Series 自带名称与索引。

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

4. 从 NumPy 数组生成

利用随机数组或其他 NumPy 数据初始化 DataFrame,同时可设定列名与行索引。

import numpy as np

arr = np.random.randn(3, 2)
df = pd.DataFrame(arr, columns=['A', 'B'], index=['x', 'y', 'z'])

5. 读取外部文件(实际应用中最普遍)

直接加载本地或远程文件中的结构化数据。

# 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

用于初始化结构,在后续过程中逐步填充数据。

# 创建完全空白的 DataFrame
df_empty = pd.DataFrame()

# 或预先定义列名
df_empty = pd.DataFrame(columns=['姓名', '年龄'])

四、DataFrame 的关键属性一览

以下是常用的内置属性及其功能说明:

属性 说明 示例
.index
行索引标签
df.index
.columns
列名集合
df.columns
.values
获取底层 NumPy 数组 适用于需要数值计算的场景
df.values
返回数据形状(行数 × 列数)
.shape
(行数, 列数)

(3, 3)
查看每列的数据类型
df.shape
.dtypes
结合使用更清晰
df.dtypes
统计总元素个数
.size
df.size
返回维度数量(始终为2)
.ndim
df.ndim
实现行列转置
.T
df.T

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

准确高效地提取所需数据是数据分析的关键步骤,主要包括以下几种方式:

1. 选择列

可以通过列名直接选取单列(返回 Series)或多列(返回 DataFrame)。

# 单列选择
df['姓名']

# 多列选择
df[['姓名', '年龄']]

2. 选择行

支持通过标签索引(.loc)或位置索引(.iloc)来获取特定行。

# 按标签选取
df.loc[0]

# 按位置选取
df.iloc[1]

3. 同时选择行与列

结合 .loc 或 .iloc 实现行列联合筛选。

# 标签方式
df.loc[0:1, ['姓名', '城市']]

# 位置方式
df.iloc[0:2, 0:2]

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

根据逻辑条件过滤出满足要求的数据子集。

# 筛选年龄大于30的记录
df[df['年龄'] > 30]

六、常用数据操作技巧

1. 添加新列

可在现有 DataFrame 中插入新的字段。

df['性别'] = ['男', '女', '男']

2. 删除行或列

使用 drop 方法移除不需要的部分。

# 删除某一列
df.drop('城市', axis=1, inplace=True)

# 删除某一行
df.drop(0, axis=0, inplace=True)

3. 重命名列名

便于统一命名规范或提升可读性。

df.rename(columns={'姓名': 'Name'}, inplace=True)

4. 数据排序

按某一列或多列进行升序或降序排列。

df.sort_values(by='年龄', ascending=False)

5. 缺失值处理

识别并处理空值(NaN),常用方法包括删除或填充。

# 删除含空值的行
df.dropna()

# 填充空值
df.fillna(0)

6. 描述性统计分析

快速获取数据的基本统计信息。

df.describe()  # 包括计数、均值、标准差、分位数等

七、高级功能概览

Pandas 提供了丰富的进阶功能,如:

  • 数据透视表(pivot_table)
  • 分组聚合(groupby)
  • 时间序列处理
  • 多级索引支持
  • 数据合并与连接(merge/join)

这些功能极大地增强了对复杂数据集的操作能力。

八、注意事项与最佳实践

  • 尽量避免频繁修改原始数据,建议使用 copy() 创建副本操作。
  • 合理使用 inplace 参数,显式赋值更利于代码可读性。
  • 优先采用向量化操作而非循环,提高执行效率。
  • 定期检查数据类型,确保 dtype 正确以避免计算错误。
  • 对于大型数据集,考虑使用 chunksize 分块读取文件。

九、总结

本文围绕 Pandas 中的 DataFrame 展开,系统介绍了其基本概念、创建方式、核心属性、数据选取方法及常见操作。作为数据分析流程中的基石,熟练掌握 DataFrame 的使用是进入数据科学领域的必要技能。通过灵活运用其提供的各种功能,可以高效完成从数据导入到预处理再到分析输出的全流程任务。

后续学习方向

建议进一步学习 GroupBy 操作、时间序列分析、数据可视化集成(如 Matplotlib/Seaborn)等内容,以全面提升数据分析实战能力。

一、选择列

通过列名选取数据时,返回结果的类型取决于所选内容:

  • df['姓名']:返回一个 Series,表示单列数据。
  • df[['姓名', '年龄']]:使用双层中括号可返回 DataFrame,适用于多列选取。

二、行数据的选取方式

1. 按标签索引(推荐方式):

  • df.loc[0]:获取标签为 0 的整行数据。
  • df.loc[0:1]:按标签进行切片操作,包含起始和结束标签对应的行。

2. 按位置索引(整数位置):

  • df.iloc[0]:选取第 0 行(基于位置,从 0 开始计数)。
  • df.iloc[0:2]:位置切片,范围左闭右开,不包含末尾索引。

三、行列同时筛选

在实际分析中常需同时指定行与列:

  • df.loc[0, '姓名']:提取特定位置的单一值。
  • df.loc[0:1, ['姓名', '年龄']]:按标签选取子集区域。
  • df.iloc[0:2, 0:2]:以整数位置方式选取前两行和前两列的数据块。

四、条件筛选:布尔索引

利用逻辑表达式实现数据过滤:

  • df[df['年龄'] > 30]:保留所有年龄大于 30 的记录行。
  • df[(df['年龄'] > 25) & (df['城市'] == '上海')]:组合多个条件,注意每个条件需用括号包裹,且使用 & 而非 and。

五、常见数据处理操作

1. 新增列字段:

  • df['性别'] = ['男', '女', '男']:直接赋值创建新列。
  • df['年龄_明年'] = df['年龄'] + 1:基于已有列进行计算生成新列。

2. 删除行或列:

  • df.drop('姓名', axis=1):删除指定列(axis=1 表示列方向)。
  • df.drop(0, axis=0):删除第 0 行(axis=0 表示行方向)。
  • 默认情况下该方法返回新的 DataFrame;若要就地修改原对象,添加参数 inplace=True。

3. 列名或索引重命名:

  • df.rename(columns={'姓名': '名字'}, inplace=True):将“姓名”改为“名字”。
  • df.rename(index={0: '第一行'}, inplace=True):修改行索引名称。

4. 数据排序功能:

  • df.sort_values('年龄'):按“年龄”列升序排列。
  • df.sort_values(['城市', '年龄'], ascending=[True, False]):先按城市升序,再按年龄降序排列。

5. 缺失值处理策略:

  • df.isnull():生成布尔矩阵,标识 NaN 所在位置。
  • df.dropna():移除含有缺失值的任意行。
  • df.fillna(0):将所有 NaN 替换为 0,也可替换为均值或其他填充策略。

6. 描述性统计分析:

  • 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>0]['A']=1 可能导致无法预期的行为。应改用以下方式:

  • ? 使用 loc 显式赋值:
    df[df['年龄']>30]['城市'] = '深圳'
    → 可能无效
    ? 正确做法:
    .loc

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

2. 复制与视图的区别:

  • df2 = df:此时 df2 是 df 的视图,修改 df2 会影响原始数据 df。
    df2 = df
  • df2 = df.copy():创建独立副本,互不影响。
    df2 = df.copy()

3. 性能优化技巧:

  • 避免使用 for 循环逐行处理数据,优先采用向量化运算以提升效率。
  • 对于大型文件读取,建议使用分块加载机制:
    chunksize

4. 内存管理方法:

  • 可通过如下命令查看内存占用情况:
    df.info()
  • 必要时调整数据类型精度以节省内存,例如将 int64 转换为 int32:
    astype()

八、总结

DataFrame 是 Pandas 库的核心结构,堪称处理结构化数据的“瑞士军刀”。它结合了 Series、灵活的索引系统以及高效的向量化操作,使得数据分析过程更加简洁高效。无论是来自 CSV 文件、数据库还是 API 接口的数据,在进入分析流程前通常都会被转换为 DataFrame 格式进行处理。

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

《实战AI大模型》

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

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

《Natural-Language-Processing-with-PyTorch》

《Learning OpenCV 4》

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

《AI 3.0》

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Dataframe pandas Frame panda 人工智能

沙发
ahc123 发表于 8 小时前
好,可以毕业了

藤椅
老马识途99 发表于 7 小时前
感谢分享。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2025-12-5 18:33