pandas中的DataFrame对象详解
1. DataFrame是什么?
DataFrame是pandas库中的核心数据结构,它是一个二维的、大小可变、可以存储多种类型数据的表格型数据结构。可以将其理解为:
- 类似于Excel电子表格 - 有行和列的数据表
- 类似于SQL表 - 具有行和列的数据库表结构
- 类似于R语言的data.frame - 为数据分析而设计的表格结构
2. DataFrame的主要特点
(1) 二维表格结构
- 有行索引(index)和列索引(columns)
- 同一列中的数据必须是相同类型,但不同列可以是不同类型。
(2) 大小可变
- 可以动态添加/删除行和列
- 可以改变DataFrame的形状
(3) 灵活的数据处理能力
- 强大的数据清洗功能
- 支持数据对齐(自动对齐索引)
- 处理缺失数据(NaN)的能力
(4) 丰富的操作接口
- 类似SQL的查询和过滤
- 分组聚合(groupby)
- 数据合并(merge, concat)
- 数据透视表(pivot_table)
3. DataFrame的用途
数据处理和分析
import pandas as pd
import numpy as np
# 1. 数据清洗
# 处理缺失值、异常值、重复值等
# 2. 数据转换
# 类型转换、数据规范化、特征工程
# 3. 数据分析
# 统计分析、聚合分析、趋势分析
# 4. 数据可视化
# 配合matplotlib, seaborn进行可视化
# 5. 机器学习的预处理
# 特征提取、数据划分等
4. DataFrame的创建方式
(1) 从字典创建
# 字典的键成为列名,值成为列数据
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 28],
'City': ['NYC', 'LA', 'Chicago', 'Houston'],
'Salary': [50000, 60000, 75000, 55000]
}
df = pd.DataFrame(data)
print(df)
(2) 从列表创建
# 列表的每个元素是一行数据
data = [
['Alice', 25, 'NYC', 50000],
['Bob', 30, 'LA', 60000],
['Charlie', 35, 'Chicago', 75000],
['David', 28, 'Houston', 55000]
]
columns = ['Name', 'Age', 'City', 'Salary']
df = pd.DataFrame(data, columns=columns)
(3) 从文件读取
# 从CSV文件
df = pd.read_csv('data.csv')
# 从Excel文件
df = pd.read_excel('data.xlsx')
# 从SQL数据库
import sqlite3
conn = sqlite3.connect('database.db')
df = pd.read_sql_query("SELECT * FROM table", conn)
5. DataFrame的基本操作
(1) 查看数据
df.head() # 前几行
df.tail() # 后几行
df.info() # 数据信息
df.describe() # 统计描述
df.shape # 形状(行数,列数)
df.columns # 列名
df.index # 行索引
(2) 选择数据
# 选择列
df['Name'] # 单列(返回Series)
df[['Name', 'Age']] # 多列(返回DataFrame)
# 选择行
df.iloc[0] # 按位置选择行
df.loc[0] # 按标签选择行
df[0:3] # 切片选择行
# 布尔索引
df[df['Age'] > 30] # 条件过滤
df[(df['Age'] > 25) & (df['Salary'] > 60000)] # 多条件
(3) 修改数据
# 添加新列
df['Bonus'] = df['Salary'] * 0.1
# 修改列
df['Salary'] = df['Salary'] * 1.05 # 涨薪5%
# 删除列
df = df.drop(columns=['Bonus']) # 删除指定列
# 删除行
df = df.drop([0, 1]) # 删除指定行
(4) 数据排序
# 按列排序
df.sort_values(by='Salary', ascending=False)
# 按多列排序
df.sort_values(by=['City', 'Salary'], ascending=[True, False])
6. 高级功能
(1) 分组聚合
# 基本分组
grouped = df.groupby('City')
grouped['Salary'].mean() # 每个城市的平均薪资
# 多重分组
df.groupby(['City', 'Age']).agg({
'Salary': ['mean', 'min', 'max', 'count']
})
(2) 数据合并
# 类似SQL的JOIN操作
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['B', 'C', 'D'], 'value': [4, 5, 6]})
# 内连接
pd.merge(df1, df2, on='key', how='inner')
# 外连接
pd.merge(df1, df2, on='key', how='outer')
(3) 数据透视表
# 创建透视表
pivot_table = df.pivot_table(
values='Salary',
index='City',
columns='Age',
aggfunc='mean',
fill_value=0
)
(4) 处理缺失值
# 检查缺失值
df.isnull().sum()
# 删除缺失值
df.dropna()
# 填充缺失值
df.fillna(0) # 填充0
df.fillna(method='ffill') # 向前填充
df.fillna(df.mean()) # 用均值填充
7. 性能特点
优势:
- 高效的数据处理 - 底层使用NumPy数组,向量化操作
- 内存优化 - 支持数据类型优化
- 快速I/O - 支持多种文件格式的快速读写
- 灵活的数据转换 - 丰富的API支持复杂转换
注意事项:
- 数据量过大时 - 需要考虑内存使用
- 循环操作慢 - 应尽量使用向量化操作而非循环
- 链式操作 - 注意内存使用和性能
8. 实际应用示例
# 完整的数据分析流程示例
def analyze_employee_data(filepath):
"""分析员工数据"""
# 1. 加载数据
df = pd.read_csv(filepath)
# 2. 数据清洗
df = df.dropna() # 删除缺失值
df = df.drop_duplicates() # 删除重复值
# 3. 数据转换
df['Join_Date'] = pd.to_datetime(df['Join_Date'])
df['Years_of_Service'] = (pd.Timestamp.now() - df['Join_Date']).dt.days / 365
# 4. 数据分析
department_stats = df.groupby('Department').agg({
'Salary': ['mean', 'median', 'std'],
'Age': 'mean',
'Employee_ID': 'count'
}).round(2)
# 5. 高级分析
df['Salary_Category'] = pd.cut(
df['Salary'],
bins=[0, 50000, 80000, float('inf')],
labels=['Low', 'Medium', 'High']
)
return df, department_stats
# 使用示例
df_result, stats = analyze_employee_data('employees.csv')
print(df_result.head())
print("\n部门统计:")
print(stats)
总结
DataFrame是pandas的核心,它提供了:
- 直观的数据结构 - 类似Excel的表格形式
- 强大的数据处理能力 - 支持复杂的查询、过滤、转换操作
- 高效的计算性能 - 基于NumPy的向量化计算
- 丰富的数据分析功能 - 统计、聚合、可视化等
- 灵活的数据整合 - 支持多种数据源和格式
对于数据分析、数据科学和机器学习项目,DataFrame是Python生态中最重要、最常用的数据处理工具之一。掌握DataFrame的使用是进行Python数据分析的基础。