Python分析和处理excel文件数据的详细步骤

 更新时间:2025年05月15日 08:52:34   作者:code_shenbing  
Python 提供了多种工具来分析和处理 Excel 文件数据,最常用的库包括 pandas、openpyxl 和 xlrd,本文将详细介绍如何使用这些工具读取、处理和分析 Excel 文件中的数据,需要的朋友可以参考下

一、准备工作

1. 安装必要的库

首先需要安装 Python 的数据处理和 Excel 处理库:

pip install pandas openpyxl xlrd

注意:

  • pandas 是核心数据处理库
  • openpyxl 用于处理 .xlsx 格式的 Excel 文件
  • xlrd 用于处理较旧的 .xls 格式(从 xlrd 2.0.0 开始不再支持 .xlsx)

2. 准备 Excel 文件

假设我们有一个名为 sales_data.xlsx 的 Excel 文件,包含以下数据:

日期产品销量单价销售额
2023-01-01产品A101001000
2023-01-01产品B52001000
2023-01-02产品A8100800
2023-01-02产品C121501800
...............

二、读取 Excel 文件

1. 使用 pandas 读取

import pandas as pd
 
# 读取整个工作表
df = pd.read_excel('sales_data.xlsx')
 
# 显示前5行数据
print(df.head())
 
# 读取特定工作表(如果有多个工作表)
# df = pd.read_excel('sales_data.xlsx', sheet_name='Sheet1')
 
# 读取特定列
# df = pd.read_excel('sales_data.xlsx', usecols=['日期', '产品', '销量'])

2. 使用 openpyxl 读取

from openpyxl import load_workbook
 
# 加载工作簿
wb = load_workbook('sales_data.xlsx')
 
# 获取活动工作表或指定工作表
sheet = wb.active  # 或 wb['Sheet1']
 
# 读取数据
data = []
for row in sheet.iter_rows(values_only=True):
    data.append(row)
 
# 转换为DataFrame(可选)
import pandas as pd
df = pd.DataFrame(data[1:], columns=data[0])  # 假设第一行是标题

三、数据基本操作

1. 查看数据信息

# 查看数据基本信息
print(df.info())
 
# 查看统计摘要
print(df.describe())
 
# 查看列名
print(df.columns.tolist())

2. 数据筛选

# 筛选特定日期的数据
jan_data = df[df['日期'] == '2023-01-01']
 
# 筛选销量大于5的产品
high_sales = df[df['销量'] > 5]
 
# 筛选多个条件
filtered_data = df[(df['日期'] >= '2023-01-01') & (df['产品'] == '产品A')]

3. 数据分组和聚合

# 按产品分组计算总销量和总销售额
product_stats = df.groupby('产品').agg({
    '销量': 'sum',
    '销售额': 'sum'
}).reset_index()
 
print(product_stats)
 
# 计算每日销售额总和
daily_sales = df.groupby('日期')['销售额'].sum().reset_index()

4. 数据排序

# 按销售额降序排序
sorted_data = df.sort_values('销售额', ascending=False)
 
# 按日期和销量排序
sorted_data = df.sort_values(['日期', '销量'], ascending=[True, False])

四、数据可视化

1. 使用 matplotlib 绘制图表

import matplotlib.pyplot as plt
 
# 设置中文字体(避免中文显示问题)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
 
# 绘制柱状图 - 各产品总销量
product_stats.plot(kind='bar', x='产品', y='销量', title='各产品总销量')
plt.ylabel('销量')
plt.show()
 
# 绘制折线图 - 每日销售额趋势
daily_sales.plot(kind='line', x='日期', y='销售额', title='每日销售额趋势')
plt.xlabel('日期')
plt.ylabel('销售额')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

2. 使用 seaborn 进行高级可视化

pip install seaborn
import seaborn as sns
 
# 设置风格
sns.set(style="whitegrid")
 
# 绘制箱线图 - 各产品销量分布
plt.figure(figsize=(10, 6))
sns.boxplot(x='产品', y='销量', data=df)
plt.title('各产品销量分布')
plt.show()
 
# 绘制热力图 - 相关性分析
corr_matrix = df[['销量', '单价', '销售额']].corr()
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.title('变量相关性热力图')
plt.show()

五、数据处理与清洗

1. 处理缺失值

# 检查缺失值
print(df.isnull().sum())
 
# 填充缺失值
df_filled = df.fillna({'销量': 0, '单价': df['单价'].mean()})
 
# 删除包含缺失值的行
df_dropped = df.dropna()

2. 数据类型转换

# 转换日期格式
df['日期'] = pd.to_datetime(df['日期'])
 
# 转换数值类型
df['销量'] = pd.to_numeric(df['销量'], errors='coerce')
df['单价'] = pd.to_numeric(df['单价'], errors='coerce')
df['销售额'] = pd.to_numeric(df['销售额'], errors='coerce')

3. 数据标准化

from sklearn.preprocessing import StandardScaler
 
# 选择需要标准化的列
features = df[['销量', '单价', '销售额']]
 
# 标准化处理
scaler = StandardScaler()
scaled_features = scaler.fit_transform(features)
 
# 转换回DataFrame
scaled_df = pd.DataFrame(scaled_features, columns=features.columns)

六、高级分析技术

1. 时间序列分析

# 确保日期是datetime类型
df['日期'] = pd.to_datetime(df['日期'])
 
# 设置日期为索引
df.set_index('日期', inplace=True)
 
# 按周汇总销售额
weekly_sales = df.resample('W')['销售额'].sum()
 
# 移动平均
df['7天移动平均销售额'] = df['销售额'].rolling(window=7).mean()

2. 相关性分析

# 计算相关性矩阵
corr_matrix = df[['销量', '单价', '销售额']].corr()
 
# 可视化相关性
import seaborn as sns
import matplotlib.pyplot as plt
 
plt.figure(figsize=(8, 6))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', center=0)
plt.title('变量相关性热力图')
plt.show()

3. 分组聚合与透 视表

# 使用groupby分组聚合
grouped = df.groupby(['产品', '日期']).agg({
    '销量': 'sum',
    '销售额': 'sum'
}).reset_index()
 
# 创建透 视表
pivot_table = df.pivot_table(
    values='销售额',
    index='日期',
    columns='产品',
    aggfunc='sum',
    fill_value=0
)
 
print(pivot_table)

七、完整示例

下面是一个完整的分析流程示例:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
 
# 1. 读取数据
df = pd.read_excel('sales_data.xlsx')
 
# 2. 数据清洗
df['日期'] = pd.to_datetime(df['日期'])
df['销量'] = pd.to_numeric(df['销量'], errors='coerce').fillna(0)
df['单价'] = pd.to_numeric(df['单价'], errors='coerce').fillna(df['单价'].mean())
df['销售额'] = pd.to_numeric(df['销售额'], errors='coerce').fillna(0)
 
# 3. 基本统计
print("基本统计信息:")
print(df.describe())
 
# 4. 按产品分组统计
product_stats = df.groupby('产品').agg({
    '销量': 'sum',
    '销售额': 'sum',
    '单价': 'mean'
}).sort_values('销售额', ascending=False)
 
print("\n各产品销售统计:")
print(product_stats)
 
# 5. 时间序列分析
df.set_index('日期', inplace=True)
daily_sales = df.resample('D')['销售额'].sum()
 
# 6. 可视化
plt.figure(figsize=(15, 10))
 
# 每日销售额趋势
plt.subplot(2, 2, 1)
daily_sales.plot(title='每日销售额趋势')
plt.ylabel('销售额')
 
# 各产品销量对比
plt.subplot(2, 2, 2)
product_stats['销量'].plot(kind='bar', title='各产品总销量')
plt.ylabel('销量')
 
# 销量与单价关系
plt.subplot(2, 2, 3)
sns.scatterplot(data=df, x='单价', y='销量', hue='产品')
plt.title('销量与单价关系')
plt.xlabel('单价')
plt.ylabel('销量')
 
# 产品销售额占比
plt.subplot(2, 2, 4)
product_stats['销售额'].plot(kind='pie', autopct='%1.1f%%', startangle=90)
plt.title('产品销售额占比')
plt.ylabel('')  # 去掉默认的ylabel
 
plt.tight_layout()
plt.show()

八、性能优化技巧

对于大型 Excel 文件,可以考虑以下优化方法:

  • ​只读取需要的列​​:

df = pd.read_excel('large_file.xlsx', usecols=['日期', '产品', '销量'])

分块读取​​:

chunk_size = 10000
chunks = pd.read_excel('very_large_file.xlsx', chunksize=chunk_size)
 
for chunk in chunks:
    process(chunk)  # 处理每个数据块
  • ​使用更高效的文件格式​​:

    • 将 Excel 转换为 CSV 后处理(通常更快)
    • 使用 Parquet 或 Feather 格式存储中间数据
  • ​并行处理​​:

import dask.dataframe as dd
 
# 使用Dask处理大型数据集
ddf = dd.read_excel('large_file.xlsx')
result = ddf.groupby('产品').销量.sum().compute()

九、常见问题解决

  • ​中文显示问题​​:

plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文字体
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题

​日期格式不一致​​:

# 尝试多种日期格式解析
df['日期'] = pd.to_datetime(df['日期'], errors='coerce', format='%Y-%m-%d')
df['日期'] = pd.to_datetime(df['日期'], errors='coerce', format='%d/%m/%Y')
df['日期'].fillna(pd.to_datetime('1900-01-01'), inplace=True)  # 处理无法解析的日期
  1. ​内存不足错误​​:

    • 使用 dtype 参数指定列的数据类型减少内存使用
    • 分块处理大型文件
    • 使用更高效的文件格式

十、扩展分析方向

  1. ​预测分析​​:

    • 使用时间序列模型预测未来销售额
    • 应用机器学习模型预测产品需求
  2. ​客户细分​​:

    • 基于购买行为进行客户分群
    • 构建RFM模型(最近购买、频率、金额)
  3. ​异常检测​​:

    • 识别异常销售记录
    • 检测数据中的异常模式
  4. ​地理空间分析​​:

    • 如果数据包含地理位置信息,可以进行地理可视化
    • 分析不同地区的销售表现

以上就是Python分析和处理excel文件数据的详细步骤的详细内容,更多关于Python分析和处理excel数据的资料请关注脚本之家其它相关文章!

相关文章

  • 使用python创建Excel工作簿及工作表过程图解

    使用python创建Excel工作簿及工作表过程图解

    这篇文章主要介绍了使用python创建Excel工作簿及工作表,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • python 制作简单的音乐播放器

    python 制作简单的音乐播放器

    这篇文章主要介绍了python 制作简单的音乐播放器,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-11-11
  • 1行代码搞定Python中的高频数据处理场景

    1行代码搞定Python中的高频数据处理场景

    本文介绍了使用Python和Pandas库进行高效数据处理的技巧,通过一行代码即可完成90%的日常数据处理需求,内容涵盖数据加载、清洗、转换、统计分析和导出全流程,希望对大家有所帮助
    2026-04-04
  • python求解数组中两个字符串的最小距离

    python求解数组中两个字符串的最小距离

    这篇文章主要为大家详细介绍了python求解数组中两个字符串的最小距离,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • Python生成xml文件方法示例

    Python生成xml文件方法示例

    Python标准库xml.etree.ElementTree提供了一些生成XML的工具,可以用于创建和操作XML文档,本文就来介绍以下如何生成生成xml文件,感兴趣的可以了解一下
    2023-09-09
  • Python实现html转png的完美方案介绍

    Python实现html转png的完美方案介绍

    这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-03-03
  • 使用python制作一个为hex文件增加版本号的脚本实例

    使用python制作一个为hex文件增加版本号的脚本实例

    今天小编就为大家分享一篇使用python制作一个为hex文件增加版本号的脚本实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python PyWebIO提升团队效率使用介绍

    Python PyWebIO提升团队效率使用介绍

    这篇文章主要为大家介绍了Python PyWebIO提升团队效率使用介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 关于Python函数参数的进阶用法

    关于Python函数参数的进阶用法

    这篇文章主要给大家分享的是Python函数参数的进阶用法,Python函数的参数根据函数 在调用时 传参的形式分为关键字参数和位置参数,下面文章小编就来介绍相关资料,需要的朋友可以参考一下
    2021-10-10
  • 基于Python实现温度单位转换器(新手版)

    基于Python实现温度单位转换器(新手版)

    这篇文章主要为大家详细介绍了如何基于Python实现温度单位转换器,主要是将摄氏温度(C)和华氏温度(F)相互转换,下面小编就来和大家简单介绍一下吧
    2025-08-08

最新评论