社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

A逍遥之路 • 3 周前 • 33 次点击  

大家好!今天我要和大家聊一聊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
 
33 次点击