Py学习  »  Python

Python数据分析入门:pandas库从零开始,轻松掌握数据处理技能!

A逍遥之路 • 6 月前 • 137 次点击  

大家好!今天我要和大家聊一聊Python数据分析中的"瑞士军刀"——pandas库。无论你是数据分析新手,还是想提升数据处理技能的Python爱好者,这篇文章都能帮你快速上手pandas,解决实际问题!

一、pandas是什么,为什么要学它?

pandas是Python中最强大的数据分析工具包之一,专为处理表格和时间序列数据而设计。如果你有Excel使用经验,可以把pandas看作是Python版的"超级Excel"。

为什么要学pandas?

  1. 处理大数据更高效:Excel打开几万行数据就卡顿,pandas能轻松处理百万级数据

  2. 自动化工作流程:重复的数据清洗和转换工作可以一键完成

  3. 强大的数据处理功能:筛选、分组、聚合、透视、合并数据等操作简单直观

  4. 与其他Python库无缝集成:配合NumPy、Matplotlib等库使用,数据分析全流程都能搞定

二、环境准备

首先,确保你已经安装了pandas:

# 如果还没安装,可以用pip安装
# pip install pandas

# 导入常用库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 设置中文显示
plt.rcParams['font.sans-serif'= ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus' = False  # 用来正常显示负号

# 查看pandas版本
print(pd.__version__)

三、pandas的核心数据结构

pandas有两种主要数据结构:Series(一维)和DataFrame(二维)。

1. Series:带标签的一维数组

pythonCopy# 创建Series
s = pd.Series([1, 3, 5, 7, 9], index=['a', 'b', 'c', 'd', 'e'])
print(s)

输出结果:

Copya    1
b    3
c    5
d    7
e    9
dtype: int64

Series可以理解为带索引的NumPy数组,或者单列的Excel表格。

2. DataFrame:带标签的二维表格

# 创建DataFrame
data = {
    '姓名': ['张三''李四''王五''赵六'],
    '年龄': [25302228],
    '城市': ['北京''上海' '广州''深圳'],
    '工资': [10000200001500025000]
}

df = pd.DataFrame(data)
print(df)

输出结果:

Copy   姓名  年龄  城市    工资
0  张三  25  北京  10000
1  李四  30  上海  20000
2  王五  22  广州  15000
3  赵六  28  深圳  25000

DataFrame是pandas最常用的数据结构,可以理解为Excel表格。

四、从文件中读取数据

实际工作中,我们通常需要从各种文件中读取数据。pandas支持多种格式:

# 读取CSV文件
df_csv = pd.read_csv('data.csv')

# 读取Excel文件
df_excel = pd.read_excel('data.xlsx'sheet_name='Sheet1')

# 读取SQL查询结果
from sqlalchemy import create_engine
engine = create_engine('sqlite:///database.db')
df_sql = pd.read_sql('SELECT * FROM table_name'engine)

# 读取JSON文件
df_json = pd.read_json('data.json')

# 读取HTML表格
df_html = pd.read_html('http://example.com/table.html')[0]

如果你手头没有数据文件,pandas提供了一些示例数据集可以练习:

# 加载示例数据集
df = pd.DataFrame({
    '日期'pd.date_range(start='2023-01-01'periods=6),
    '部门': ['销售''技术''销售''市场''技术''市场'],
    '销售额': [100501309060120],
    '成本': [703090604080]
})
print(df)

五、数据探索和基本操作

拿到数据第一步,先来了解它的基本情况:

# 查看前几行数据
print(df.head())

# 查看基本信息
print(df.info())

# 查看统计摘要
print(df.describe())

# 查看形状(行数和列数)
print(df.shape)

# 查看列名
print(df.columns)

# 查看索引
print(df.index)

选择和过滤数据

# 选择单列
print(df['销售额'])

# 选择多列
print(df[['部门''销售额']])

# 条件筛选
print (df[df['销售额'> 100])

# 组合条件
print(df[(df['销售额'> 100& (df['部门'== '销售')])

# loc方法:基于标签索引
print(df.loc[1:3, ['部门''销售额']])

# iloc方法:基于位置索引
print(df.iloc[1:3, [12]])

数据排序

# 按销售额降序排序
print(df.sort_values('销售额'ascending=False))

# 按多列排序
print(df.sort_values(['部门''销售额'], ascending=[TrueFalse]))

六、数据清洗和处理

处理缺失值

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

# 填充缺失值
df_filled = df.fillna({
    '销售额'df['销售额'].mean(),
    '成本'0
})

# 删除含有缺失值的行
df_dropped = df.dropna()

删除重复值

# 检查重复行
print(df.duplicated().sum())

# 删除重复行
df_unique = df.drop_duplicates()

# 只根据特定列判断重复
df_unique_subset = df.drop_duplicates(subset=['部门'])

数据类型转换

# 查看数据类型
print(df.dtypes)

# 转换数据类型
df['销售额'= df['销售额'].astype(float)
df['部门'= df['部门'].astype('category')  # 对于有限的分类值,使用category类型可以节省内存

重命名列

# 重命名列
df_renamed = df.rename(columns={
    '销售额''revenue',
    '成本''cost'
})

七、数据计算和转换

创建新列

# 基于现有列创建新列
df['利润'= df['销售额'- df['成本']
df['利润率'= df['利润'/ df['销售额']

# 使用apply应用函数
def profit_category( profit):
    if profit > 50:
        return '高'
    elif profit > 20:
        return '中'
    else:
        return '低'

df['利润等级'= df['利润'].apply(profit_category)

聚合分析

# 按部门分组并计算统计值
group_result = df.groupby('部门').agg({
    '销售额': ['sum''mean''max'],
    '成本': ['sum''mean'],
    '利润''sum'
})
print(group_result)

# 交叉表分析
cross_tab = pd.crosstab(
    index=df['部门'],
    columns=df['利润等级'],
    values=df['销售额'],
    aggfunc='sum'
)
print(cross_tab)

数据透视表

# 透视表
pivot_table = df.pivot_table(
    values='销售额',
    index='部门',
    columns='利润等级',
    aggfunc='sum',
    fill_value=0
)
print(pivot_table)

八、时间序列数据处理

pandas在处理时间序列数据方面特别强大:

# 设置日期作为索引
df_time = df.set_index('日期')

# 按月重采样(汇总)
monthly = df_time.resample('M')['销售额'].sum()
print(monthly)

# 移动平均
ma7 = df_time['销售额'].rolling(window=3).mean()

# 按季度分组
quarterly = df_time.groupby(pd.Grouper(freq='Q'))['销售额'].sum()
print(quarterly)

九、数据可视化

pandas与matplotlib集成,可以直接绘制图表:

# 折线图
df.groupby('部门')['销售额'].sum().plot(kind='line')
plt.title('各部门销售额')
plt.show()

# 柱状图
df.plot(x='部门'y='销售额'kind='bar')
plt.title('各部门销售额')
plt.show()

# 饼图
df.groupby('部门')['销售额'].sum().plot(kind ='pie'autopct='%1.1f%%')
plt.title('销售额占比')
plt.show()

# 散点图
df.plot(x='销售额'y='利润'kind='scatter')
plt.title('销售额与利润关系')
plt.show()

十、实战案例:销售数据分析

让我们整合前面学到的知识,完成一个简单的销售数据分析案例:

# 修复matplotlib后端问题
import matplotlib
matplotlib.use('TkAgg')  # 使用非交互式后端,适合脚本环境
import matplotlib.pyplot as plt

# 创建销售数据
import pandas as pd
import numpy as np


# 设置中文显示
plt.rcParams['font.sans-serif'= ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'= False  # 用来正常显示负号

# 查看pandas版本
print(pd.__version__)

dates = pd.date_range('20230101'periods=100)
np.random.seed(42)

sales_data = pd.DataFrame({
    '日期'dates,
    '产品'np.random.choice(['A产品''B产品''C产品'], size=100),
    '区域'np.random.choice(['华东''华南''华北''西部'], size=100),
    '销售量'np.random.randint(10100size=100),
    '单价'np.random.choice([99199299399], size=100),
})

# 计算销售额
sales_data['销售额'= sales_data['销售量'* sales_data['单价']

# 1. 数据清洗和准备
# 检查数据完整性
print("缺失值统计:")
print(sales_data.isnull().sum())

# 2. 探索性分析
# 基本统计量
print("基本统计量:")
print(sales_data.describe())

# 3. 按产品分析销售情况
product_sales = sales_data.groupby('产品').agg({
    '销售量''sum',
    '销售额''sum'
}).sort_values('销售额'ascending=False)
print("产品销售排名:")
print(product_sales)

# 4. 按区域分析销售情况
region_sales = sales_data.groupby('区域').agg({
    '销售量''sum',
    '销售额''sum'
}).sort_values('销售额'ascending=False)
print("区域销售排名:")
print(region_sales)

# 5. 时间趋势分析
# 设置日期为索引
sales_by_date = sales_data.set_index('日期')
# 按周统计
weekly_sales = sales_by_date.resample('W')['销售额'].sum()
print( "周销售趋势:")
print(weekly_sales.head())

# 6. 交叉分析
# 产品在各区域的销售情况
product_region = sales_data.pivot_table(
    values='销售额',
    index='产品',
    columns='区域',
    aggfunc='sum',
    fill_value=0
)
print("产品区域交叉分析:")
print(product_region)

# 7. 保存图表到文件,而不是显示
# 创建图表
plt.figure(figsize=(1510))

# 产品销售额占比饼图
plt.subplot(221)
product_sales['销售额'].plot(kind='pie'autopct='%1.1f%%')
plt.title('各产品销售额占比')

# 区域销售额柱状图
plt.subplot(222)
region_sales['销售额'].plot(kind='bar')
plt.title('各区域销售额')

# 周销售趋势图
plt.subplot(212)
weekly_sales.plot()
plt.title('周销售额趋势')

plt.tight_layout()

# 保存图表到文件而不是显示
plt.savefig('sales_analysis.png')

plt.show()

plt.close()  # 关闭图表

# 8. 输出分析报告
print("\n===== 销售数据分析报告 =====")
print(f"总销售额: {sales_data['销售额'].sum():.2f}元")
print(f"销售最好的产品: {product_sales.index[0]}, 销售额: {product_sales['销售额'].iloc[0]:.2f}元")
print(f"销售最好的区域: {region_sales.index[0]}, 销售额: {region_sales['销售额'].iloc[0]:.2f}元")

恭喜你!通过这篇文章,你已经掌握了pandas的核心功能:

  1. 数据结构:Series和DataFrame

  2. 数据读取和预览

  3. 数据选择和过滤

  4. 数据清洗和处理

  5. 数据计算和转换

  6. 分组聚合和透视分析

  7. 时间序列处理

  8. 数据可视化

这只是pandas功能的冰山一角。随着你的实践越来越多,你会发现pandas几乎能满足所有数据分析需求。建议你准备一些真实数据集进行练习,比如:销售数据、网站访问日志、股票价格、疫情数据等。

数据分析是一个实践的过程,多动手才能真正掌握。希望这篇文章能帮你快速入门pandas,成为数据分析高手!

如果你喜欢这篇文章,别忘了点赞、收藏和分享给你的朋友!有任何问题,欢迎在评论区交流!

转发、收藏、在看,是对作者最大的鼓励!👏

关注逍遥不迷路,Python知识日日补!






           对Python,AI,自动化办公提效,副业发展等感兴趣的伙伴们,扫码添加逍遥,限免交流群

备注【成长交流】

图片

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/180665