Pandas DataFrame 全面用法指南
·
DataFrame 是 Pandas 核心二维数据结构,类似 Excel 表格或 SQL 数据表,支持多种数据类型、灵活索引及丰富的数据处理操作,是数据分析的核心工具。
一、核心特点
- 二维结构:由行和列组成,可看作多个共享同一索引的 Series 集合
- 类型灵活:不同列可存储整数、字符串、布尔值等不同数据类型
- 双索引体系:同时支持行索引(index)和列索引(columns)
- 功能完备:内置数据访问、筛选、清洗、聚合、可视化衔接等功能
- 缺失值支持:用 NaN 表示缺失数据,提供专门的处理方法
- 跨格式兼容:轻松读取 / 写入 CSV、Excel、SQL 等多种数据格式
二、构造方法(含代码示例)
DataFrame 支持多种数据输入创建,以下是最常用的 4 种方式:
1. 列表创建
import pandas as pd
# 外层列表为行,内层列表为列数据
data = [['Google', 10], ['Runoob', 12], ['Wiki', 13]]
# 指定列名,后续可通过 astype 设定数据类型
df = pd.DataFrame(data, columns=['Site', 'Age'])
df['Site'] = df['Site'].astype(str) # 字符串类型
df['Age'] = df['Age'].astype(float) # 浮点型
print(df)
2. 字典创建
import pandas as pd
# 字典的键为列名,值为列数据(列表形式)
data = {'Site': ['Google', 'Runoob', 'Wiki'], 'Age': [10, 12, 13]}
df = pd.DataFrame(data)
print(df)
# 处理缺失数据场景
data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data) # 缺失值自动填充为 NaN
print(df)
3. NumPy 数组创建
import pandas as pd
import numpy as np
# 二维 ndarray 作为数据,需保证每行长度一致
ndarray_data = np.array([['Google', 10], ['Runoob', 12], ['Wiki', 13]])
df = pd.DataFrame(ndarray_data, columns=['Site', 'Age'])
print(df)
4. Series 组合创建
import pandas as pd
# 多个 Series 共享索引,组合为 DataFrame
s1 = pd.Series(['Alice', 'Bob', 'Charlie'])
s2 = pd.Series([25, 30, 35])
s3 = pd.Series(['New York', 'Los Angeles', 'Chicago'])
df = pd.DataFrame({'Name': s1, 'Age': s2, 'City': s3})
print(df)
三、构造函数参数(表格汇总)
| 参数名 | 功能描述 | 默认值 |
| data | 输入数据,可接受字典、二维数组、Series、DataFrame 等 | None |
| index | 行索引,支持列表、数组、索引对象 | 默认整数索引(0,1,2...) |
| columns | 列索引,支持列表、数组、索引对象 | 默认整数索引(0,1,2...) |
| dtype | 数据类型,可指定 NumPy 数据类型(如 np.int64) | 自动推断 |
| copy | 是否复制输入数据 | False |
四、常用属性(快速查看数据信息)
| 属性名 | 功能描述 | 示例 |
| shape | 返回数据维度(行数,列数) | df.shape → (3,2) |
| columns | 返回所有列名 | df.columns → Index(['Site', 'Age'], dtype='object') |
| index | 返回行索引 | df.index → Index(['day1','day2'], dtype='object') |
| dtypes | 返回各列数据类型 | df.dtypes → Site: object, Age: float64 |
| info() | 显示数据概要(非空值、类型、内存占用) | df.info() |
| describe() | 数值列统计信息(均值、标准差等) | df.describe() |
五、核心操作(含代码示例)
1. 数据访问
import pandas as pd
data = {"calories": [420, 380, 390], "duration": [50, 40, 45]}
df = pd.DataFrame(data, index=["day1", "day2", "day3"])
# 按列访问
print(df['calories']) # 通过列名
print(df.calories) # 属性式访问(列名无空格时)
# 按行访问
print(df.loc["day2"]) # 按标签索引
print(df.iloc[1]) # 按位置索引(第2行)
# 访问多行/多列
print(df.loc[["day1", "day3"]]) # 多行
print(df[['calories', 'duration']]) # 多列
# 访问单个元素
print(df.loc["day1", "calories"]) # 标签定位
print(df.iloc[0, 0]) # 位置定位
print(df.at["day1", "calories"]) # 高效访问单个元素
2. 数据修改
# 修改列数据
df['calories'] = [450, 400, 420]
# 添加新列
df['burned'] = [200, 180, 190]
# 添加新行(推荐 concat,append 已弃用)
new_row = pd.DataFrame([[350, 35, 170]], columns=['calories','duration','burned'], index=['day4'])
df = pd.concat([df, new_row], ignore_index=False)
# 删除列
df = df.drop('burned', axis=1)
# 删除行
df = df.drop('day4')
3. 缺失值与重复值处理
# 填充缺失值
df['Age'] = df['Age'].fillna(30) # 用30填充 NaN
# 删除缺失值
df_clean = df.dropna() # 删除含 NaN 的行(axis=0)
# 检测重复行
print(df.duplicated()) # 布尔值表示是否重复
# 删除重复行
df_unique = df.drop_duplicates()
4. 排序与分组
# 按列排序
df_sorted = df.sort_values(by='Age', ascending=False) # 降序
# 按索引排序
df_sorted_idx = df.sort_index()
# 分组统计
grouped = df.groupby('City')['Age'].mean() # 按城市分组计算平均年龄
5. 数据合并与分割
# 纵向合并(追加行)
df1 = pd.DataFrame({'a': [1,2], 'b': [3,4]})
df2 = pd.DataFrame({'a': [5,6], 'b': [7,8]})
df_concat = pd.concat([df1, df2], ignore_index=True)
# 横向合并(关联列)
df3 = pd.DataFrame({'a': [1,2], 'c': [9,10]})
df_merge = pd.merge(df1, df3, on='a') # 按 a 列关联
# 长格式转宽格式(透视表)
df_pivot = df.pivot(index='Name', columns='City', values='Age')
六、常用方法汇总(核心功能速查)
| 方法名 | 功能描述 |
| head(n) | 返回前 n 行数据(默认 5 行) |
| tail(n) | 返回后 n 行数据(默认 5 行) |
| sort_values(by) | 按指定列排序 |
| dropna() | 删除含缺失值的行 / 列 |
| fillna(value) | 填充缺失值 |
| query() | SQL 风格查询数据(如 df.query ("Age>30")) |
| to_csv() | 导出为 CSV 文件 |
| to_excel() | 导出为 Excel 文件 |
| apply(func) | 对列 / 行应用自定义函数 |
| groupby(by) | 分组汇总统计 |
七、注意事项
- 避免使用 append () 方法:该方法已弃用,推荐用 concat () 实现数据追加
- 索引对齐特性:算术运算时会自动按索引对齐数据,需注意索引一致性
- 数据类型转换:用 astype () 方法明确指定类型,避免自动推断导致的错误
- 内存优化:对于大数据集,可指定 dtype 为更小的类型(如 int32 替代 int64)
感谢大家的阅读 制作不易 麻烦各位点点关注和收藏 每天8点持续更新!!!
更多推荐

所有评论(0)