一文彻底拿下Python的pandas框架

程序员Feri一名12年+的程序员,做过开发带过团队创过业,擅长Java、鸿蒙、嵌入式、人工智能等开发,专注于程序员成长的那点儿事,希望在成长的路上有你相伴!君志所向,一往无前!


Pandas是Python中最强大的数据处理和分析库之一,广泛应用于数据清洗、转换、分析和可视化。从基础到高级,系统性地讲解Pandas的核心功能,帮助你彻底掌握这一框架。

1. Pandas核心数据结构

Pandas的核心数据结构是 Series 和 DataFrame,它们是高效处理数据的基础。

  1. Series

定义:一维带标签的数组,可以存储任意类型的数据。 创建方法:

import pandas as pd

# 从列表创建
s = pd.Series([1, 3, 5, 7], name='numbers')

# 从字典创建(键为索引)
s = pd.Series({'a': 10, 'b': 20, 'c': 30})

  1. 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等。

  1. 读取数据

# 读取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)
  1. 保存数据

# 保存为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提供了丰富的工具。

  1. 处理缺失值

# 检查缺失值
df.isnull().sum()

# 删除缺失值
df.dropna()

# 填充缺失值
df.fillna(0)                   # 填充为0
df.fillna(df['Age'].mean())    # 填充为均值
  1. 处理重复值

# 检查重复行
df.duplicated()

# 删除重复行
df.drop_duplicates()
  1. 数据类型转换

# 转换列类型
df['Age'] = df['Age'].astype(int)

# 日期转换
df['Date'] = pd.to_datetime(df['Date'])

4. 数据筛选与查询

灵活的数据筛选是Pandas的核心优势。

  1. 基于列的筛选

# 选择单列
df['Name']

# 选择多列
df[['Name', 'Age']]
  1. 基于行的筛选

# 通过索引
df.loc[0]          # 选择第一行
df.iloc[0:3]       # 选择前三行

# 通过条件筛选
df[df['Age'] > 30]  # 年龄大于30的行
df[(df['City'] == 'Paris') & (df['Age'] < 40)]  # 多条件筛选
  1. 排序

df.sort_values(by='Age', ascending=False)  # 按年龄降序排序

5.数据聚合与分组

分组聚合是数据分析的核心操作。

  1. GroupBy

# 按城市分组,计算平均年龄
grouped = df.groupby('City')['Age'].mean()

# 多级分组
grouped = df.groupby(['City', 'Gender'])['Age'].mean()
  1. 聚合函数

# 使用agg进行多聚合
df.groupby('City').agg({'Age': ['mean', 'max', 'min'],'Salary': 'sum'})
  1. 透视表

# 创建透视表
pd.pivot_table(df, values='Salary', index='City', columns='Gender', aggfunc='mean')

6.数据合并与连接

Pandas支持多种数据合并方式。

  1. concat

# 垂直合并(堆叠)
pd.concat([df1, df2], axis=0)

# 水平合并
pd.concat([df1, df2], axis=1)
  1. merge

# 类似SQL的JOIN操作
pd.merge(df1, df2, on='key', how='inner')

7.时间序列处理

Pandas对时间序列的支持非常强大。

  1. 生成日期范围

dates = pd.date_range('2023-01-01', periods=5, freq='D')
  1. 重采样(Resample)

# 按周重采样并求和
df.resample('W').sum()

8.性能优化技巧

  1. 向量化操作 避免使用循环,尽量使用Pandas内置函数:

# 低效方式
for i in range(len(df)):
    df['New_Col'][i] = df['Age'][i] * 2

# 高效方式
df['New_Col'] = df['Age'] * 2
  1. 使用apply函数

df['Age'] = df['Age'].apply(lambda x: x * 2)
  1. 类型优化 使用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参数分块读取。 性能瓶颈:优先使用向量化操作,避免循环。

好啦,就到这里吧,今晚要早睡!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值