程序员Feri一名12年+的程序员,做过开发带过团队创过业,擅长Java、鸿蒙、嵌入式、人工智能等开发,专注于程序员成长的那点儿事,希望在成长的路上有你相伴!君志所向,一往无前!
Pandas是Python中最强大的数据处理和分析库之一,广泛应用于数据清洗、转换、分析和可视化。从基础到高级,系统性地讲解Pandas的核心功能,帮助你彻底掌握这一框架。
1. Pandas核心数据结构
Pandas的核心数据结构是 Series 和 DataFrame,它们是高效处理数据的基础。
-
Series
定义:一维带标签的数组,可以存储任意类型的数据。 创建方法:
import pandas as pd
# 从列表创建
s = pd.Series([1, 3, 5, 7], name='numbers')
# 从字典创建(键为索引)
s = pd.Series({'a': 10, 'b': 20, 'c': 30})
-
DataFrame
定义:二维表格型数据结构,类似于Excel或SQL表。 创建方法:
# 从字典创建
data = {'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Paris', 'London']}
df = pd.DataFrame(data)
# 从CSV文件读取
df = pd.read_csv('data.csv')
2.数据导入与导出
Pandas支持多种数据格式的读写,包括CSV、Excel、SQL、JSON等。
-
读取数据
# 读取CSV
df = pd.read_csv('data.csv')
# 读取Excel
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 读取SQL(需配合SQLAlchemy)
from sqlalchemy import create_engine
engine = create_engine('sqlite:///database.db')
df = pd.read_sql('SELECT * FROM table', engine)
-
保存数据
# 保存为CSV
df.to_csv('output.csv', index=False)
# 保存为Excel
df.to_excel('output.xlsx', sheet_name='Sheet1')
# 保存到SQL
df.to_sql('table_name', engine, if_exists='replace')
3.数据清洗与预处理
数据清洗是数据分析的关键步骤,Pandas提供了丰富的工具。
-
处理缺失值
# 检查缺失值
df.isnull().sum()
# 删除缺失值
df.dropna()
# 填充缺失值
df.fillna(0) # 填充为0
df.fillna(df['Age'].mean()) # 填充为均值
-
处理重复值
# 检查重复行
df.duplicated()
# 删除重复行
df.drop_duplicates()
-
数据类型转换
# 转换列类型
df['Age'] = df['Age'].astype(int)
# 日期转换
df['Date'] = pd.to_datetime(df['Date'])
4. 数据筛选与查询
灵活的数据筛选是Pandas的核心优势。
-
基于列的筛选
# 选择单列
df['Name']
# 选择多列
df[['Name', 'Age']]
-
基于行的筛选
# 通过索引
df.loc[0] # 选择第一行
df.iloc[0:3] # 选择前三行
# 通过条件筛选
df[df['Age'] > 30] # 年龄大于30的行
df[(df['City'] == 'Paris') & (df['Age'] < 40)] # 多条件筛选
-
排序
df.sort_values(by='Age', ascending=False) # 按年龄降序排序
5.数据聚合与分组
分组聚合是数据分析的核心操作。
-
GroupBy
# 按城市分组,计算平均年龄
grouped = df.groupby('City')['Age'].mean()
# 多级分组
grouped = df.groupby(['City', 'Gender'])['Age'].mean()
-
聚合函数
# 使用agg进行多聚合
df.groupby('City').agg({'Age': ['mean', 'max', 'min'],'Salary': 'sum'})
-
透视表
# 创建透视表
pd.pivot_table(df, values='Salary', index='City', columns='Gender', aggfunc='mean')
6.数据合并与连接
Pandas支持多种数据合并方式。
-
concat
# 垂直合并(堆叠)
pd.concat([df1, df2], axis=0)
# 水平合并
pd.concat([df1, df2], axis=1)
-
merge
# 类似SQL的JOIN操作
pd.merge(df1, df2, on='key', how='inner')
7.时间序列处理
Pandas对时间序列的支持非常强大。
-
生成日期范围
dates = pd.date_range('2023-01-01', periods=5, freq='D')
-
重采样(Resample)
# 按周重采样并求和
df.resample('W').sum()
8.性能优化技巧
-
向量化操作 避免使用循环,尽量使用Pandas内置函数:
# 低效方式
for i in range(len(df)):
df['New_Col'][i] = df['Age'][i] * 2
# 高效方式
df['New_Col'] = df['Age'] * 2
-
使用apply函数
df['Age'] = df['Age'].apply(lambda x: x * 2)
-
类型优化 使用category类型节省内存:
df['City'] = df['City'].astype('category')
9.实战案例
案例:分析销售数据
# 读取数据
sales = pd.read_csv('sales.csv')
# 计算每个产品的总销售额
product_sales = sales.groupby('Product')['Revenue'].sum()
# 找出销售额最高的月份
sales['Month'] = sales['Date'].dt.month
best_month = sales.groupby('Month')['Revenue'].sum().idxmax()
10.常见问题与解决方案
内存不足:使用df.info()查看内存占用,优化数据类型。 处理大型数据集:使用chunksize参数分块读取。 性能瓶颈:优先使用向量化操作,避免循环。
好啦,就到这里吧,今晚要早睡!