当前位置: 代码网 > it编程>前端脚本>Python > Python数据分析之Pandas核心操作详解

Python数据分析之Pandas核心操作详解

2026年09月03日 Python 我要评论
一、前言在数据驱动的时代,python已成为数据分析领域的主流语言。而pandas作为python生态中最强大的数据处理库,提供了高效、灵活的数据结构,使得数据清洗、转换、分析变得异常简单。本文将从基

一、前言

在数据驱动的时代,python已成为数据分析领域的主流语言。而pandas作为python生态中最强大的数据处理库,提供了高效、灵活的数据结构,使得数据清洗、转换、分析变得异常简单。

本文将从基础概念出发,结合真实业务场景,带你一步步掌握pandas的核心用法。

二、环境准备

2.1 安装依赖

# 安装核心库
pip install pandas numpy openpyxl matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

2.2 导入库

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 设置显示选项(防止列数过多时省略)
pd.set_option('display.max_columns', none)
pd.set_option('display.width', 1000)

三、核心数据结构

3.1 series对象

series是一维带标签数组,可以保存任意数据类型。

# 通过列表创建
s = pd.series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
print(s)

# 输出:
# a    10
# b    20
# c    30
# d    40
# dtype: int64

# 基本属性
print(f"索引: {s.index.tolist()}")
print(f"值: {s.values}")
print(f"数据类型: {s.dtype}")

3.2 dataframe对象

dataframe是二维表格型数据结构,是pandas最常用的对象。

# 通过字典创建
data = {
    '姓名': ['张三', '李四', '王五', '赵六'],
    '年龄': [25, 30, 28, 35],
    '城市': ['北京', '上海', '广州', '深圳'],
    '薪资': [15000, 20000, 18000, 25000]
}

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

输出结果:

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

四、数据读取与查看

4.1 读取常见文件格式

# 读取csv文件
df_csv = pd.read_csv('data.csv', encoding='utf-8')

# 读取excel文件
df_excel = pd.read_excel('data.xlsx', sheet_name='sheet1')

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

4.2 快速查看数据

# 查看前5行
df.head()

# 查看后5行
df.tail(3)

# 查看数据形状(行数, 列数)
print(f"数据形状: {df.shape}")

# 查看数据类型
df.dtypes

# 查看统计摘要(仅数值列)
df.describe()

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

五、数据清洗实战

真实数据往往存在缺失值、重复值、异常值,清洗是分析前的必经之路。

5.1 处理缺失值

# 构造含缺失值的数据
df_missing = pd.dataframe({
    'a': [1, 2, np.nan, 4],
    'b': [5, np.nan, np.nan, 8],
    'c': [9, 10, 11, 12]
})

# 查看缺失值分布
print(df_missing.isnull().sum())

# 删除含缺失值的行( thresh=2 表示至少保留2个非空值)
df_clean = df_missing.dropna(thresh=2)

# 填充缺失值
df_filled = df_missing.fillna({
    'a': df_missing['a'].mean(),  # 用均值填充
    'b': 0                         # 用0填充
})

5.2 处理重复值

# 删除完全重复的行
df_no_dup = df.drop_duplicates()

# 按特定列去重(保留第一次出现的)
df_no_dup = df.drop_duplicates(subset=['姓名'], keep='first')

5.3 数据类型转换

# 转换数据类型
df['年龄'] = df['年龄'].astype(int)

# 字符串转日期
df['日期'] = pd.to_datetime(df['日期_str'], format='%y-%m-%d')

六、数据筛选与查询

6.1 条件筛选

# 单条件筛选:年龄大于28岁
df[df['年龄'] > 28]

# 多条件筛选:北京且薪资大于18000
df[(df['城市'] == '北京') & (df['薪资'] > 18000)]

# isin筛选:城市为北京或上海
df[df['城市'].isin(['北京', '上海'])]

6.2 loc与iloc定位

# loc按标签索引(闭区间)
df.loc[0:2, ['姓名', '薪资']]

# iloc按位置索引(左闭右开)
df.iloc[0:2, 0:3]

# 条件赋值:给北京员工加薪10%
df.loc[df['城市'] == '北京', '薪资'] *= 1.1

6.3 query查询(推荐)

# 使用query进行复杂条件查询(代码更简洁)
df.query("城市 == '北京' and 薪资 > 15000")

七、分组统计与聚合

7.1 groupby分组

# 按城市分组,计算平均薪资
city_avg = df.groupby('城市')['薪资'].mean()
print(city_avg)

# 多列分组
result = df.groupby(['城市', '年龄'])['薪资'].agg(['mean', 'max', 'count'])
print(result)

7.2 透视表

# 创建透视表:查看各城市各年龄段的平均薪资
pivot = pd.pivot_table(
    df, 
    values='薪资', 
    index='城市', 
    columns='年龄', 
    aggfunc='mean',
    fill_value=0
)
print(pivot)

7.3 交叉表

# 统计各城市的人数分布
cross = pd.crosstab(df['城市'], df['年龄'])
print(cross)

八、数据合并与重塑

8.1 数据合并

# 构造两个dataframe
df1 = pd.dataframe({'员工id': [1, 2, 3], '姓名': ['张三', '李四', '王五']})
df2 = pd.dataframe({'员工id': [1, 2, 4], '部门': ['技术', '产品', '运营']})

# 内连接(只保留两边都有的id)
merged = pd.merge(df1, df2, on='员工id', how='inner')

# 左连接(保留左边所有数据)
merged_left = pd.merge(df1, df2, on='员工id', how='left')

8.2 数据拼接

# 纵向拼接(行增加)
df_concat = pd.concat([df1, df2], axis=0, ignore_index=true)

# 横向拼接(列增加)
df_concat_col = pd.concat([df1, df2], axis=1)

九、实战案例:电商销售分析

以下是一个完整的电商销售数据分析案例,涵盖从数据读取到可视化输出的全流程。

import pandas as pd
import matplotlib.pyplot as plt

# 1. 读取数据(模拟电商订单数据)
data = {
    '订单id': [1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008],
    '日期': ['2024-01-15', '2024-01-16', '2024-01-17', '2024-01-15',
             '2024-01-18', '2024-01-16', '2024-01-19', '2024-01-15'],
    '品类': ['手机', '电脑', '手机', '配件', '电脑', '配件', '手机', '配件'],
    '地区': ['华东', '华北', '华东', '华南', '华北', '华东', '华南', '华南'],
    '销售额': [5999, 8999, 6999, 199, 9999, 299, 7999, 99],
    '数量': [1, 1, 1, 3, 1, 2, 1, 5]
}

orders = pd.dataframe(data)
orders['日期'] = pd.to_datetime(orders['日期'])

# 2. 数据清洗:检查缺失值
print("缺失值统计:")
print(orders.isnull().sum())

# 3. 业务分析

# 3.1 各品类总销售额
category_sales = orders.groupby('品类')['销售额'].sum().sort_values(ascending=false)
print("\n各品类销售额:")
print(category_sales)

# 3.2 各地区平均客单价
orders['客单价'] = orders['销售额'] / orders['数量']
region_avg = orders.groupby('地区')['客单价'].mean()
print("\n各地区平均客单价:")
print(region_avg)

# 3.3 每日销售趋势
daily_sales = orders.groupby('日期')['销售额'].sum()

# 4. 数据可视化
plt.rcparams['font.sans-serif'] = ['simhei']  # 中文显示
plt.rcparams['axes.unicode_minus'] = false

fig, axes = plt.subplots(1, 2, figsize=(12, 5))

# 品类销售额柱状图
category_sales.plot(kind='bar', ax=axes[0], color='skyblue', edgecolor='black')
axes[0].set_title('各品类销售额对比', fontsize=14)
axes[0].set_ylabel('销售额(元)')
axes[0].tick_params(axis='x', rotation=45)

# 每日销售趋势折线图
daily_sales.plot(kind='line', ax=axes[1], marker='o', color='coral', linewidth=2)
axes[1].set_title('每日销售趋势', fontsize=14)
axes[1].set_ylabel('销售额(元)')
axes[1].grid(true, alpha=0.3)

plt.tight_layout()
plt.savefig('sales_analysis.png', dpi=150)
plt.show()

# 5. 输出分析结论
print("\n=== 分析结论 ===")
print(f"1. 最热销品类:{category_sales.index[0]},销售额 {category_sales.iloc[0]} 元")
print(f"2. 客单价最高地区:{region_avg.idxmax()},平均 {region_avg.max():.2f} 元")
print(f"3. 销售高峰日期:{daily_sales.idxmax().strftime('%y-%m-%d')},当日 {daily_sales.max()} 元")

运行结果分析:

各品类销售额:
手机    20997
电脑    18998
配件      597
name: 销售额, dtype: int64

各地区平均客单价:
华东    4365.67
华北    9499.00
华南    1656.33
name: 客单价, dtype: float64

=== 分析结论 ===
1. 最热销品类:手机,销售额 20997 元
2. 客单价最高地区:华北,平均 9499.00 元
3. 销售高峰日期:2024-01-15,当日 6297 元

十、总结与进阶路线

本文核心知识点回顾

操作类型核心方法使用场景
数据读取read_csv/read_excel加载外部数据
数据查看head/info/describe快速了解数据概况
缺失值处理dropna/fillna数据清洗
条件筛选[]/loc/query提取目标数据
分组统计groupby/agg分类汇总分析
数据合并merge/concat多表关联
透视分析pivot_table多维度统计

进阶学习路线

  1. 时间序列分析:掌握resampleshiftrolling等时序处理方法
  2. 高性能计算:学习eval/query加速、cython优化、dask并行计算
  3. 数据可视化:结合matplotlib/seaborn/plotly制作交互式图表
  4. 实战项目:kaggle竞赛、天池大赛、企业真实业务分析

写在最后:pandas的学习曲线平缓但功能深邃。建议读者将本文代码逐行敲入jupyter notebook运行,修改参数观察输出变化,这是掌握pandas最高效的方式。如果在学习过程中遇到问题,欢迎在评论区留言交流。

以上就是python数据分析之pandas核心操作详解的详细内容,更多关于python pandas核心操作的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com