
第三章 DataFrame
DataFrame 是pandas中最常用的二维数据结构,用于处理二维表格型数据(类似 Excel 表格或 SQL 表)。它是数据分析、清洗、探索和建模的基础工具。本文从定义、结构、创建方式、常用操作、高级功能等方面进行全面而深入的介绍。
DataFrame 是一个带标签的二维异构数据结构,具有以下特点:
✅ 简单理解:DataFrame = 多个共享同一索引的 Series 组成的字典
特性 | 说明 |
|---|---|
二维表格结构 | 行 × 列,支持混合数据类型 |
自动对齐 | 运算时按行索引和列名自动对齐 |
缺失值支持 | 使用 |
灵活索引 | 支持 |
可扩展性强 | 易于添加/删除行、列,支持合并、连接、重塑等操作 |
与 NumPy 兼容 | 可通过 |
import pandas as pd
data = {
'姓名': ['张三', '李四', '王五'],
'年龄': [25, 30, 35],
'城市': ['北京', '上海', '广州']
}
df = pd.DataFrame(data)
⚠️ 字典的 key → 列名,value(列表/数组)→ 列数据,长度必须一致。
data = [['张三', 25, '北京'],
['李四', 30, '上海'],
['王五', 35, '广州']]
df = pd.DataFrame(data, columns=['姓名', '年龄', '城市'])s1 = pd.Series([25, 30, 35], name='年龄')
s2 = pd.Series(['北京', '上海', '广州'], name='城市')
df = pd.DataFrame({'年龄': s1, '城市': s2})
import numpy as np
arr = np.random.randn(3, 2)
df = pd.DataFrame(arr, columns=['A', 'B'], index=['x', 'y', 'z'])
# CSV
df = pd.read_csv('data.csv')
# Excel
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# JSON
df = pd.read_json('data.json')df_empty = pd.DataFrame()
# 或指定列
df_empty = pd.DataFrame(columns=['姓名', '年龄'])属性 | 说明 | 示例 |
|---|---|---|
| 行索引 |
|
| 列名 |
|
| 数据(NumPy 数组) |
|
| 形状 |
|
| 每列的数据类型 |
|
| 总元素数 |
|
| 维度(总是 2) |
|
| 转置 |
|
df['姓名'] # 返回 Series
df[['姓名', '年龄']] # 返回 DataFrame(注意双括号)
df.loc[0, '姓名'] # 单个值
df.loc[0:1, ['姓名', '年龄']] # 子集
df.iloc[0:2, 0:2] # 位置方式df[df['年龄'] > 30] # 年龄大于 30 的行
df[(df['年龄'] > 25) & (df['城市'] == '上海')] # 多条件(注意括号和 &)df['性别'] = ['男', '女', '男'] # 直接赋值
df['年龄_明年'] = df['年龄'] + 1 # 基于现有列计算df.drop('姓名', axis=1) # 删除列(axis=1)
df.drop(0, axis=0) # 删除第 0 行(axis=0)
# 默认返回新对象,加 inplace=True 可原地修改df.rename(columns={'姓名': '名字'}, inplace=True)
df.rename(index={0: '第一行'}, inplace=True)df.sort_values('年龄') # 按“年龄”升序
df.sort_values(['城市', '年龄'], ascending=[True, False])df.isnull() # 判断是否为 NaN
df.dropna() # 删除含 NaN 的行
df.fillna(0) # 用 0 填充 NaNdf.describe() # 数值列的统计摘要(均值、标准差、分位数等)
df['年龄'].mean() # 单列均值功能 | 方法/说明 |
|---|---|
分组聚合 |
|
透视表 |
|
合并数据 |
|
重塑数据 |
|
时间序列 | 支持 DatetimeIndex,可进行重采样( |
apply 函数 |
|
df[df['年龄']>30]['城市'] = '深圳' → 可能无效
✅ 使用 .loc:df.loc[df['年龄']>30, '城市'] = '深圳'df2 = df 是引用(修改 df2 会影响 df)df2 = df.copy() 创建独立副本chunksize 分块读取df.info() 查看内存占用astype() 降低数据类型精度(如 int64 → int32)DataFrame 是 Pandas 的灵魂:它是结构化数据处理的“瑞士军刀”; 结合 Series、索引、向量化操作,实现高效、简洁的数据分析; 几乎所有真实场景的数据(CSV、数据库、API 返回)最终都会转为 DataFrame 处理。
python过渡项目部分代码已经上传至gitee,后续会逐步更新。
公众号:咚咚王
《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》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。