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

作者:

文章目录
  • 下面是一个完整的分析流程示例: 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) # 处理无法解析的日期 ​​内存不足错误​​: 使用 dtype 参数指定列的数据类型减少内存使用 分块处理大型文件 使用更高效的文件格式
  • ​​预测分析​​: 使用时间序列模型预测未来销售额 应用机器学习模型预测产品需求 ​​客户细分​​: 基于购买行为进行客户分群 构建RFM模型(最近购买、频率、金额) ​​异常检测​​: 识别异常销售记录 检测数据中的异常模式 ​​地理空间分析​​: 如果数据包含地理位置信息,可以进行地理可视化 分析不同地区的销售表现 以上就是Python分析和处理excel文件数据的详细步骤的详细内容,更多关于Python分析和处理excel数据的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: 使用Python自动处理Excel数据缺失值的完整指南 Python数据处理之导入导出Excel数据方式 使用Python处理Excel文件并将数据存储到PostgreSQL的方法 Python与xlwings黄金组合处理Excel各种数据和自动化任务 Python实现处理Excel数据并生成只读模式
  • 目录
    • 一、准备工作
      • 1. 安装必要的库
      • 2. 准备 Excel 文件
    • 二、读取 Excel 文件
      • 1. 使用 pandas 读取
      • 2. 使用 openpyxl 读取
    • 三、数据基本操作
      • 1. 查看数据信息
      • 2. 数据筛选
      • 3. 数据分组和聚合
      • 4. 数据排序
    • 四、数据可视化
      • 1. 使用 matplotlib 绘制图表
      • 2. 使用 seaborn 进行高级可视化
    • 五、数据处理与清洗
      • 1. 处理缺失值
      • 2. 数据类型转换
      • 3. 数据标准化
    • 六、高级分析技术
      • 1. 时间序列分析
      • 2. 相关性分析
      • 3. 分组聚合与透 视表
    • 七、完整示例
      • 八、性能优化技巧
        • 九、常见问题解决
          • 十、扩展分析方向

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

            pip install pandas openpyxl xlrd

            注意:

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

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

            日期 产品 销量 单价 销售额
            2023-01-01 产品A 10 100 1000
            2023-01-01 产品B 5 200 1000
            2023-01-02 产品A 8 100 800
            2023-01-02 产品C 12 150 1800

            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=['日期', '产品', '销量'])

            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])  # 假设第一行是标题

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

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

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

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

            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()

            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()

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

            # 转换日期格式
            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')

            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)

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

            # 计算相关性矩阵
            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()

            # 使用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文件并将数据存储到PostgreSQL的方法
            • Python与xlwings黄金组合处理Excel各种数据和自动化任务
            • Python实现处理Excel数据并生成只读模式

            站内搜索