Pandas数据处理
Pandas数据处理
Pandas是Python中最强大的数据处理库,它提供了高效、灵活的数据结构,使得数据清洗、转换和分析变得简单直观。
Series与DataFrame基础
Pandas的两个核心数据结构是Series(一维)和DataFrame(二维)。
import pandas as pd
import numpy as np
# Series创建
s = pd.Series([1, 3, 5, 7, 9], index=['a', 'b', 'c', 'd', 'e'])
print(f"Series:\n{s}")
# DataFrame创建
df = pd.DataFrame({
'姓名': ['张三', '李四', '王五', '赵六'],
'年龄': [25, 30, 35, 28],
'部门': ['技术', '市场', '技术', '销售']
})
print(f"DataFrame:\n{df}")
print(f"形状: {df.shape}")
print(f"列名: {df.columns.tolist()}")
数据读取与写入
Pandas支持多种格式的数据读写。
# 读取CSV
# df = pd.read_csv('data.csv', encoding='utf-8')
# 从字典创建
data = {
'产品': ['A', 'B', 'C', 'D', 'E'],
'销量': [100, 150, 200, 120, 180],
'价格': [10.5, 20.3, 15.7, 8.9, 25.1]
}
df = pd.DataFrame(data)
# 写入Excel
# df.to_excel('output.xlsx', index=False)
print(f"前3行:\n{df.head(3)}")
print(f"\n统计描述:\n{df.describe()}")
数据选择与过滤
Pandas提供了多种方式选择数据。
df = pd.DataFrame({
'姓名': ['张三', '李四', '王五', '赵六'],
'年龄': [25, 30, 35, 28],
'薪资': [8000, 12000, 15000, 9000],
'部门': ['技术', '市场', '技术', '销售']
})
# 选择列
print(f"姓名列:\n{df['姓名']}")
print(f"多列选择:\n{df['姓名', '薪资'](/notes/-)}")
# 条件筛选
tech_df = df[df['部门'] == '技术']
print(f"技术部门:\n{tech_df}")
high_salary = df[df['薪资'] > 10000]
print(f"高薪资员工:\n{high_salary}")
# 组合条件
result = df[(df['部门'] == '技术') & (df['年龄'] > 25)]
print(f"技术部门且年龄>25:\n{result}")
数据清洗
数据清洗是数据分析中最耗时但最重要的步骤。
df = pd.DataFrame({
'姓名': ['张三', '李四', None, '赵六', '钱七'],
'年龄': [25, np.nan, 35, 28, 40],
'薪资': [8000, 12000, None, 9000, None],
'部门': ['技术', '市场', '技术', '', '销售']
})
print("缺失值统计:")
print(df.isnull().sum())
# 填充缺失值
df['姓名'] = df['姓名'].fillna('未知')
df['年龄'] = df['年龄'].fillna(df['年龄'].median())
df['薪资'] = df['薪资'].fillna(df['薪资'].mean())
# 替换空字符串
df['部门'] = df['部门'].replace('', '未分配')
# 删除重复行
df = df.drop_duplicates()
print(f"\n清洗后数据:\n{df}")
数据聚合与分组
GroupBy是Pandas中最强大的功能之一。
sales_df = pd.DataFrame({
'日期': ['2024-01', '2024-01', '2024-02', '2024-02', '2024-03', '2024-03'],
'区域': ['东', '西', '东', '西', '东', '西'],
'销售额': [10000, 8000, 12000, 9500, 15000, 11000],
'利润': [2000, 1500, 2500, 1800, 3000, 2200]
})
# 按区域分组聚合
region_summary = sales_df.groupby('区域').agg({
'销售额': 'sum',
'利润': ['sum', 'mean']
})
print(f"区域汇总:\n{region_summary}")
# 按日期和区域分组
pivot = sales_df.pivot_table(
values='销售额',
index='日期',
columns='区域',
aggfunc='sum'
)
print(f"\n透视表:\n{pivot}")
数据合并
Pandas提供了类似SQL的合并操作。
employees = pd.DataFrame({
'员工ID': [1, 2, 3, 4],
'姓名': ['张三', '李四', '王五', '赵六'],
'部门ID': [101, 102, 101, 103]
})
departments = pd.DataFrame({
'部门ID': [101, 102, 103],
'部门名称': ['技术', '市场', '销售']
})
merged = pd.merge(employees, departments, on='部门ID')
print(f"合并结果:\n{merged}")
# 拼接
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
concatenated = pd.concat([df1, df2], ignore_index=True)
print(f"\n拼接结果:\n{concatenated}")
Pandas是数据科学工作流的核心工具,熟练掌握将大幅提升数据分析效率。建议结合实际数据集进行练习。