活动公告

系统通知
05-18 21:22
系统通知
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,资源失效请在帖子内回复要求补档,会尽快处理!
10-23 09:31

如何用pandas高效输出数据均值 数据分析必备技能 详解处理缺失值异常值及结果格式化的实用技巧 让你的数据分析报告更加专业 赢得职场竞争优势

SunJu_FaceMall

3万

主题

2860

科技点

3万

积分

白金月票

碾压王

积分
32872

塔罗立华奏

<font color=白金月票" /> 发表于 2025-9-25 11:10:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在数据分析领域,均值是最基础且最常用的统计指标之一。它能够帮助我们快速了解数据的集中趋势,为后续分析提供重要参考。本文将详细介绍如何使用Python的pandas库高效计算和输出数据均值,同时处理数据中的缺失值和异常值,并通过格式化技巧使结果呈现更加专业。掌握这些技能,不仅能提高你的数据分析效率,还能让你的分析报告更具说服力,从而在职场中脱颖而出。

1. Pandas计算均值的基础方法

Pandas是Python数据分析的核心库,它提供了多种计算数据均值的方法。掌握这些基础方法是进行高效数据分析的第一步。

1.1 Series对象的均值计算

对于一维数据(Series对象),计算均值非常简单:
  1. import pandas as pd
  2. import numpy as np
  3. # 创建一个Series对象
  4. s = pd.Series([10, 20, 30, 40, 50])
  5. # 计算均值
  6. mean_value = s.mean()
  7. print(f"Series的均值为: {mean_value}")
  8. # 输出: Series的均值为: 30.0
复制代码

1.2 DataFrame对象的均值计算

对于二维数据(DataFrame对象),我们可以计算各列的均值:
  1. # 创建一个DataFrame对象
  2. df = pd.DataFrame({
  3.     'A': [1, 2, 3, 4, 5],
  4.     'B': [10, 20, 30, 40, 50],
  5.     'C': [100, 200, 300, 400, 500]
  6. })
  7. # 计算各列的均值
  8. column_means = df.mean()
  9. print("各列的均值:")
  10. print(column_means)
复制代码

输出结果:
  1. 各列的均值:
  2. A      3.0
  3. B     30.0
  4. C    300.0
  5. dtype: float64
复制代码

我们也可以计算各行的均值:
  1. # 计算各行的均值
  2. row_means = df.mean(axis=1)
  3. print("\n各行的均值:")
  4. print(row_means)
复制代码

输出结果:
  1. 各行的均值:
  2. 0     37.0
  3. 1     74.0
  4. 2    111.0
  5. 3    148.0
  6. 4    185.0
  7. dtype: float64
复制代码

1.3 分组计算均值

在实际数据分析中,我们经常需要根据某个分类变量分组计算均值:
  1. # 创建一个包含分类变量的DataFrame
  2. df_grouped = pd.DataFrame({
  3.     'Category': ['A', 'A', 'B', 'B', 'A', 'B'],
  4.     'Value': [10, 15, 20, 25, 30, 35]
  5. })
  6. # 按Category分组计算Value的均值
  7. grouped_means = df_grouped.groupby('Category')['Value'].mean()
  8. print("分组均值:")
  9. print(grouped_means)
复制代码

输出结果:
  1. 分组均值:
  2. Category
  3. A    18.333333
  4. B    26.666667
  5. Name: Value, dtype: float64
复制代码

2. 高效处理缺失值

现实世界的数据往往不完美,缺失值是常见问题。正确处理缺失值对于计算准确的均值至关重要。

2.1 识别缺失值

首先,我们需要识别数据中的缺失值:
  1. # 创建包含缺失值的DataFrame
  2. df_missing = pd.DataFrame({
  3.     'A': [1, 2, np.nan, 4, 5],
  4.     'B': [10, np.nan, 30, np.nan, 50],
  5.     'C': [100, 200, 300, 400, np.nan]
  6. })
  7. # 检查缺失值
  8. print("缺失值统计:")
  9. print(df_missing.isnull().sum())
复制代码

输出结果:
  1. 缺失值统计:
  2. A    1
  3. B    2
  4. C    1
  5. dtype: int64
复制代码

2.2 删除缺失值

最简单的处理方式是删除包含缺失值的行或列:
  1. # 删除包含缺失值的行
  2. df_dropped_rows = df_missing.dropna()
  3. print("\n删除缺失值行后的DataFrame:")
  4. print(df_dropped_rows)
  5. # 删除包含缺失值的列
  6. df_dropped_cols = df_missing.dropna(axis=1)
  7. print("\n删除缺失值列后的DataFrame:")
  8. print(df_dropped_cols)
复制代码

2.3 填充缺失值

删除数据可能会导致信息丢失,更常用的方法是填充缺失值:
  1. # 用0填充缺失值
  2. df_filled_zero = df_missing.fillna(0)
  3. print("\n用0填充缺失值:")
  4. print(df_filled_zero)
  5. # 用均值填充缺失值
  6. df_filled_mean = df_missing.fillna(df_missing.mean())
  7. print("\n用均值填充缺失值:")
  8. print(df_filled_mean)
  9. # 使用前向填充(用前一个非缺失值填充)
  10. df_filled_ffill = df_missing.fillna(method='ffill')
  11. print("\n前向填充:")
  12. print(df_filled_ffill)
  13. # 使用后向填充(用后一个非缺失值填充)
  14. df_filled_bfill = df_missing.fillna(method='bfill')
  15. print("\n后向填充:")
  16. print(df_filled_bfill)
复制代码

2.4 插值法填充缺失值

对于时间序列数据,插值法是处理缺失值的常用方法:
  1. # 创建时间序列数据
  2. date_rng = pd.date_range(start='2020-01-01', end='2020-01-10')
  3. ts = pd.Series([1, 2, np.nan, 4, 5, np.nan, np.nan, 8, 9, 10], index=date_rng)
  4. # 线性插值
  5. ts_linear = ts.interpolate(method='linear')
  6. print("\n线性插值:")
  7. print(ts_linear)
  8. # 时间插值
  9. ts_time = ts.interpolate(method='time')
  10. print("\n时间插值:")
  11. print(ts_time)
  12. # 多项式插值
  13. ts_poly = ts.interpolate(method='polynomial', order=2)
  14. print("\n多项式插值:")
  15. print(ts_poly)
复制代码

3. 处理异常值

异常值可能会严重影响均值的计算结果,因此识别和处理异常值是数据分析的重要步骤。

3.1 识别异常值

常用的异常值识别方法包括Z-score方法和IQR方法:
  1. # 创建包含异常值的DataFrame
  2. np.random.seed(42)
  3. df_outliers = pd.DataFrame({
  4.     'Normal': np.random.normal(0, 1, 100),
  5.     'With_Outliers': np.append(np.random.normal(0, 1, 95), [10, -10, 15, -15, 20])
  6. })
  7. # Z-score方法识别异常值
  8. from scipy import stats
  9. z_scores = stats.zscore(df_outliers)
  10. abs_z_scores = np.abs(z_scores)
  11. outlier_indices = np.where(abs_z_scores > 3)
  12. print("Z-score方法识别的异常值位置:", outlier_indices)
  13. # IQR方法识别异常值
  14. Q1 = df_outliers.quantile(0.25)
  15. Q3 = df_outliers.quantile(0.75)
  16. IQR = Q3 - Q1
  17. lower_bound = Q1 - 1.5 * IQR
  18. upper_bound = Q3 + 1.5 * IQR
  19. outliers_iqr = ((df_outliers < lower_bound) | (df_outliers > upper_bound)).any(axis=1)
  20. print("\nIQR方法识别的异常值行:")
  21. print(df_outliers[outliers_iqr])
复制代码

3.2 处理异常值

处理异常值的方法包括删除、替换和转换:
  1. # 删除异常值
  2. df_no_outliers = df_outliers[~outliers_iqr]
  3. print("\n删除异常值后的数据形状:", df_no_outliers.shape)
  4. # 用中位数替换异常值
  5. df_median_replace = df_outliers.copy()
  6. for col in df_median_replace.columns:
  7.     median_val = df_median_replace[col].median()
  8.     df_median_replace.loc[(df_median_replace[col] < lower_bound[col]) |
  9.                          (df_median_replace[col] > upper_bound[col]), col] = median_val
  10. print("\n用中位数替换异常值后的数据:")
  11. print(df_median_replace.tail())
  12. # 对数转换处理异常值
  13. df_log_transformed = np.log1p(df_outliers['With_Outliers'].clip(lower=0))  # 确保所有值>0
  14. print("\n对数转换后的数据:")
  15. print(df_log_transformed.tail())
复制代码

3.3 鲁棒统计方法

除了处理异常值,我们还可以使用对异常值不敏感的鲁棒统计方法:
  1. # 计算均值和中位数
  2. mean_val = df_outliers['With_Outliers'].mean()
  3. median_val = df_outliers['With_Outliers'].median()
  4. trimmed_mean = stats.trim_mean(df_outliers['With_Outliers'], 0.1)  # 剔除10%的极端值
  5. print(f"均值: {mean_val}")
  6. print(f"中位数: {median_val}")
  7. print(f"修剪均值: {trimmed_mean}")
复制代码

4. 结果格式化的实用技巧

计算完均值后,如何以专业、清晰的方式呈现结果同样重要。

4.1 基本格式化

Pandas提供了多种格式化数值的方法:
  1. # 创建示例数据
  2. df_format = pd.DataFrame({
  3.     'Value1': [1234.56789, 2345.6789, 3456.789],
  4.     'Value2': [0.123456, 0.234567, 0.345678],
  5.     'Percentage': [0.2345, 0.3456, 0.4567]
  6. })
  7. # 设置浮点数精度
  8. pd.set_option('display.float_format', '{:.2f}'.format)
  9. print("设置浮点数精度后的DataFrame:")
  10. print(df_format)
  11. # 重置格式
  12. pd.reset_option('display.float_format')
复制代码

4.2 使用style方法格式化

Pandas的style方法提供了更丰富的格式化选项:
  1. # 使用style方法格式化
  2. styled_df = df_format.style.format({
  3.     'Value1': '{:,.2f}',  # 千位分隔符,保留两位小数
  4.     'Value2': '{:.4f}',   # 保留四位小数
  5.     'Percentage': '{:.2%}'  # 百分比格式
  6. })
  7. print("\n使用style方法格式化:")
  8. display(styled_df)  # 在Jupyter Notebook中显示
  9. # 添加条件格式
  10. styled_df = df_format.style.format({
  11.     'Value1': '{:,.2f}',
  12.     'Value2': '{:.4f}',
  13.     'Percentage': '{:.2%}'
  14. }).background_gradient(cmap='Blues')  # 添加背景渐变
  15. print("\n添加条件格式:")
  16. display(styled_df)
复制代码

4.3 自定义格式化函数

对于更复杂的格式化需求,我们可以定义自定义函数:
  1. # 自定义格式化函数
  2. def custom_format(val):
  3.     if val > 3000:
  4.         return f"**{val:,.2f}**"  # 大于3000的值加粗
  5.     else:
  6.         return f"{val:,.2f}"
  7. # 应用自定义格式化
  8. styled_df = df_format.style.format({
  9.     'Value1': custom_format,
  10.     'Value2': '{:.4f}',
  11.     'Percentage': '{:.2%}'
  12. })
  13. print("\n应用自定义格式化:")
  14. display(styled_df)
复制代码

4.4 导出格式化结果

将格式化结果导出为Excel或HTML:
  1. # 导出为Excel
  2. styled_df.to_excel('formatted_results.xlsx', engine='openpyxl')
  3. # 导出为HTML
  4. html = styled_df.render()
  5. with open('formatted_results.html', 'w') as f:
  6.     f.write(html)
复制代码

5. 综合应用实例

让我们通过一个综合实例,展示如何将上述技巧应用于实际数据分析中。
  1. # 创建模拟数据集
  2. np.random.seed(42)
  3. dates = pd.date_range(start='2022-01-01', end='2022-12-31')
  4. categories = ['Electronics', 'Clothing', 'Groceries', 'Furniture']
  5. n_records = 1000
  6. data = {
  7.     'Date': np.random.choice(dates, n_records),
  8.     'Category': np.random.choice(categories, n_records),
  9.     'Sales': np.random.lognormal(mean=4, sigma=1, size=n_records),
  10.     'Quantity': np.random.randint(1, 10, size=n_records),
  11.     'Discount': np.random.uniform(0, 0.3, size=n_records)
  12. }
  13. # 添加一些缺失值和异常值
  14. for i in np.random.choice(n_records, size=50, replace=False):
  15.     data['Sales'][i] = np.nan
  16. for i in np.random.choice(n_records, size=20, replace=False):
  17.     data['Quantity'][i] = np.nan
  18. # 添加异常值
  19. for i in np.random.choice(n_records, size=10, replace=False):
  20.     data['Sales'][i] = np.random.uniform(5000, 10000)
  21. df_sales = pd.DataFrame(data)
  22. # 计算单价
  23. df_sales['Unit_Price'] = df_sales['Sales'] / df_sales['Quantity']
  24. # 1. 数据清洗
  25. # 处理缺失值
  26. df_sales['Sales'] = df_sales['Sales'].fillna(df_sales.groupby('Category')['Sales'].transform('mean'))
  27. df_sales['Quantity'] = df_sales['Quantity'].fillna(df_sales.groupby('Category')['Quantity'].transform('median'))
  28. df_sales['Unit_Price'] = df_sales['Unit_Price'].fillna(df_sales.groupby('Category')['Unit_Price'].transform('mean'))
  29. # 处理异常值
  30. for category in categories:
  31.     category_data = df_sales[df_sales['Category'] == category]
  32.    
  33.     # 使用IQR方法识别异常值
  34.     Q1 = category_data['Sales'].quantile(0.25)
  35.     Q3 = category_data['Sales'].quantile(0.75)
  36.     IQR = Q3 - Q1
  37.    
  38.     lower_bound = Q1 - 1.5 * IQR
  39.     upper_bound = Q3 + 1.5 * IQR
  40.    
  41.     # 用类别内中位数替换异常值
  42.     median_val = category_data['Sales'].median()
  43.     df_sales.loc[(df_sales['Category'] == category) &
  44.                 ((df_sales['Sales'] < lower_bound) | (df_sales['Sales'] > upper_bound)), 'Sales'] = median_val
  45. # 2. 计算各类别均值
  46. category_stats = df_sales.groupby('Category').agg({
  47.     'Sales': ['mean', 'median', 'std'],
  48.     'Quantity': 'mean',
  49.     'Unit_Price': 'mean',
  50.     'Discount': 'mean'
  51. }).round(2)
  52. # 扁平化多级列索引
  53. category_stats.columns = ['_'.join(col).strip() for col in category_stats.columns.values]
  54. category_stats = category_stats.reset_index()
  55. # 3. 格式化结果
  56. formatted_stats = category_stats.style.format({
  57.     'Sales_mean': '${:,.2f}',
  58.     'Sales_median': '${:,.2f}',
  59.     'Sales_std': '${:,.2f}',
  60.     'Quantity_mean': '{:.1f}',
  61.     'Unit_Price_mean': '${:,.2f}',
  62.     'Discount_mean': '{:.1%}'
  63. }).background_gradient(cmap='Blues', subset=['Sales_mean', 'Unit_Price_mean'])
  64. # 显示结果
  65. print("各类别销售统计:")
  66. display(formatted_stats)
  67. # 4. 创建月度趋势分析
  68. df_sales['Month'] = df_sales['Date'].dt.to_period('M')
  69. monthly_sales = df_sales.groupby(['Month', 'Category'])['Sales'].mean().unstack()
  70. # 格式化月度趋势
  71. monthly_trend = monthly_sales.style.format('${:,.2f}').background_gradient(cmap='Greens', axis=1)
  72. print("\n月度平均销售趋势:")
  73. display(monthly_trend)
  74. # 5. 导出结果
  75. formatted_stats.to_excel('category_sales_stats.xlsx', engine='openpyxl')
  76. monthly_trend.to_excel('monthly_sales_trend.xlsx', engine='openpyxl')
复制代码

6. 提升数据分析报告的专业性

除了技术层面的处理,如何让你的数据分析报告更加专业,从而在职场中脱颖而出?

6.1 添加数据可视化

将均值分析结果可视化,可以更直观地传达信息:
  1. import matplotlib.pyplot as plt
  2. import seaborn as sns
  3. # 设置图形风格
  4. sns.set(style="whitegrid")
  5. plt.figure(figsize=(12, 6))
  6. # 绘制各类别平均销售额柱状图
  7. ax = sns.barplot(x='Category', y='Sales_mean', data=category_stats, palette='viridis')
  8. # 添加数据标签
  9. for p in ax.patches:
  10.     ax.annotate(f"${p.get_height():,.2f}",
  11.                 (p.get_x() + p.get_width() / 2., p.get_height()),
  12.                 ha='center', va='center',
  13.                 xytext=(0, 10),
  14.                 textcoords='offset points')
  15. # 设置标题和标签
  16. plt.title('Average Sales by Category', fontsize=16, fontweight='bold')
  17. plt.xlabel('Category', fontsize=12)
  18. plt.ylabel('Average Sales ($)', fontsize=12)
  19. # 调整布局
  20. plt.tight_layout()
  21. # 保存图形
  22. plt.savefig('average_sales_by_category.png', dpi=300, bbox_inches='tight')
  23. plt.show()
复制代码

6.2 创建交互式报告

使用Jupyter Notebook或Dash等工具创建交互式报告:
  1. # 使用plotly创建交互式图表
  2. import plotly.express as px
  3. # 创建交互式柱状图
  4. fig = px.bar(category_stats,
  5.              x='Category',
  6.              y='Sales_mean',
  7.              error_y='Sales_std',
  8.              title='Average Sales by Category with Standard Deviation',
  9.              labels={'Sales_mean': 'Average Sales ($)', 'Category': 'Product Category'},
  10.              color='Category',
  11.              text='Sales_mean')
  12. # 格式化文本标签
  13. fig.update_traces(texttemplate='$%{text:,.2f}', textposition='outside')
  14. # 更新布局
  15. fig.update_layout(
  16.     uniformtext_minsize=8,
  17.     uniformtext_mode='hide',
  18.     title_font_size=20,
  19.     xaxis_title_font_size=14,
  20.     yaxis_title_font_size=14
  21. )
  22. # 显示图表
  23. fig.show()
  24. # 保存为HTML
  25. fig.write_html('interactive_sales_report.html')
复制代码

6.3 添加解释性文本

专业的数据分析报告不仅包含数字和图表,还应有清晰的解释:
  1. # 创建一个包含解释性文本的报告
  2. report = f"""
  3. # 销售数据分析报告
  4. ## 执行摘要
  5. 本报告分析了{len(df_sales)}条销售记录,涵盖{len(categories)}个产品类别。分析期间,我们发现:
  6. - 整体平均销售额为${df_sales['Sales'].mean():,.2f}
  7. - 销售额最高的产品类别是{category_stats.loc[category_stats['Sales_mean'].idxmax(), 'Category']},平均销售额为${category_stats['Sales_mean'].max():,.2f}
  8. - 销售额最低的产品类别是{category_stats.loc[category_stats['Sales_mean'].idxmin(), 'Category']},平均销售额为${category_stats['Sales_mean'].min():,.2f}
  9. ## 详细分析
  10. ### 各类别销售表现
  11. {category_stats.to_string(index=False)}
  12. ### 关键发现
  13. 1. {category_stats.loc[category_stats['Sales_mean'].idxmax(), 'Category']}类别的平均销售额显著高于其他类别,这表明该类别产品可能是我们的主要收入来源。
  14. 2. {category_stats.loc[category_stats['Unit_Price_mean'].idxmax(), 'Category']}类别的平均单价最高,为${category_stats['Unit_Price_mean'].max():,.2f}。
  15. 3. {category_stats.loc[category_stats['Discount_mean'].idxmax(), 'Category']}类别的平均折扣率最高,为{category_stats['Discount_mean'].max():.1%}。
  16. ## 建议
  17. 基于以上分析,我们建议:
  18. 1. 增加{category_stats.loc[category_stats['Sales_mean'].idxmax(), 'Category']}类别的库存和营销投入,以进一步提高销售额。
  19. 2. 考虑调整{category_stats.loc[category_stats['Unit_Price_mean'].idxmin(), 'Category']}类别的定价策略,以提高利润率。
  20. 3. 评估{category_stats.loc[category_stats['Discount_mean'].idxmax(), 'Category']}类别的高折扣策略对整体盈利能力的影响。
  21. ## 方法说明
  22. 本报告使用Python的pandas库进行数据处理和分析。在计算均值前,我们进行了以下数据清洗步骤:
  23. 1. 使用类别内均值填充销售额缺失值
  24. 2. 使用类别内中位数填充数量缺失值
  25. 3. 使用IQR方法识别并处理异常值,用类别内中位数替换
  26. 这些步骤确保了分析结果的准确性和可靠性。
  27. """
  28. # 保存报告
  29. with open('sales_analysis_report.md', 'w') as f:
  30.     f.write(report)
复制代码

7. 职场竞争优势

掌握上述技能如何帮助你在职场中获得竞争优势?

7.1 提高工作效率

高效的数据处理能力可以显著减少工作时间:
  1. # 传统方法 vs 高效方法对比
  2. import time
  3. # 创建大型数据集
  4. large_df = pd.DataFrame({
  5.     'A': np.random.normal(0, 1, 1000000),
  6.     'B': np.random.normal(5, 2, 1000000),
  7.     'C': np.random.normal(-5, 3, 1000000)
  8. })
  9. # 添加一些缺失值和异常值
  10. for i in np.random.choice(1000000, size=50000, replace=False):
  11.     large_df.loc[i, 'A'] = np.nan
  12. for i in np.random.choice(1000000, size=1000, replace=False):
  13.     large_df.loc[i, 'B'] = np.random.uniform(20, 30)
  14. # 传统方法 - 使用循环
  15. start_time = time.time()
  16. traditional_means = []
  17. for col in large_df.columns:
  18.     # 删除缺失值
  19.     col_data = large_df[col].dropna()
  20.    
  21.     # 识别异常值
  22.     Q1 = col_data.quantile(0.25)
  23.     Q3 = col_data.quantile(0.75)
  24.     IQR = Q3 - Q1
  25.     lower_bound = Q1 - 1.5 * IQR
  26.     upper_bound = Q3 + 1.5 * IQR
  27.    
  28.     # 过滤异常值
  29.     filtered_data = col_data[(col_data >= lower_bound) & (col_data <= upper_bound)]
  30.    
  31.     # 计算均值
  32.     traditional_means.append(filtered_data.mean())
  33. traditional_time = time.time() - start_time
  34. print(f"传统方法耗时: {traditional_time:.4f}秒")
  35. # 高效方法 - 使用向量化操作
  36. start_time = time.time()
  37. # 定义处理函数
  38. def robust_mean(series):
  39.     # 删除缺失值
  40.     clean_series = series.dropna()
  41.    
  42.     # 识别异常值
  43.     Q1 = clean_series.quantile(0.25)
  44.     Q3 = clean_series.quantile(0.75)
  45.     IQR = Q3 - Q1
  46.     lower_bound = Q1 - 1.5 * IQR
  47.     upper_bound = Q3 + 1.5 * IQR
  48.    
  49.     # 过滤异常值并计算均值
  50.     return clean_series[(clean_series >= lower_bound) & (clean_series <= upper_bound)].mean()
  51. # 应用函数
  52. efficient_means = large_df.apply(robust_mean)
  53. efficient_time = time.time() - start_time
  54. print(f"高效方法耗时: {efficient_time:.4f}秒")
  55. print(f"效率提升: {traditional_time/efficient_time:.1f}倍")
复制代码

7.2 提升分析质量

专业的数据处理方法可以提高分析结果的准确性和可靠性:
  1. # 比较不同处理方法对均值的影响
  2. np.random.seed(42)
  3. test_data = pd.Series(np.append(np.random.normal(100, 15, 990), [10, 10, 10, 300, 300, 300, 300, 300, 300, 300]))
  4. # 原始数据均值
  5. raw_mean = test_data.mean()
  6. print(f"原始数据均值: {raw_mean:.2f}")
  7. # 删除缺失值后的均值
  8. no_outliers_mean = test_data[(test_data >= 50) & (test_data <= 150)].mean()
  9. print(f"删除异常值后的均值: {no_outliers_mean:.2f}")
  10. # 使用修剪均值
  11. trimmed_mean = stats.trim_mean(test_data, 0.05)  # 剔除5%的极端值
  12. print(f"修剪均值: {trimmed_mean:.2f}")
  13. # 使用中位数
  14. median_val = test_data.median()
  15. print(f"中位数: {median_val:.2f}")
  16. # 分析结果
  17. print("\n分析:")
  18. print(f"原始数据均值受到异常值影响,比真实中心趋势高出{raw_mean - no_outliers_mean:.2f}")
  19. print(f"修剪均值和中位数提供了对异常值更鲁棒的估计")
复制代码

7.3 增强沟通效果

专业的数据呈现方式可以更有效地传达分析结果:
  1. # 创建对比图表 - 原始数据 vs 处理后数据
  2. fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 6))
  3. # 原始数据分布
  4. sns.histplot(test_data, kde=True, ax=ax1)
  5. ax1.set_title('原始数据分布', fontsize=14, fontweight='bold')
  6. ax1.axvline(raw_mean, color='red', linestyle='--', label=f'均值: {raw_mean:.2f}')
  7. ax1.legend()
  8. # 处理后数据分布
  9. clean_data = test_data[(test_data >= 50) & (test_data <= 150)]
  10. sns.histplot(clean_data, kde=True, ax=ax2)
  11. ax2.set_title('处理后数据分布', fontsize=14, fontweight='bold')
  12. ax2.axvline(no_outliers_mean, color='red', linestyle='--', label=f'均值: {no_outliers_mean:.2f}')
  13. ax2.legend()
  14. plt.tight_layout()
  15. plt.savefig('data_distribution_comparison.png', dpi=300, bbox_inches='tight')
  16. plt.show()
复制代码

结论

掌握使用pandas高效计算数据均值的技能,包括处理缺失值、异常值以及结果格式化,是现代数据分析的基本要求。通过本文介绍的方法和技巧,你可以:

1. 使用pandas的各种方法高效计算数据均值
2. 识别并适当处理数据中的缺失值
3. 检测和处理异常值,确保分析结果的准确性
4. 使用格式化技巧使结果呈现更加专业
5. 创建包含可视化、交互性和解释性文本的综合报告

这些技能不仅能提高你的工作效率,还能提升分析质量,增强沟通效果,从而在职场中获得竞争优势。随着数据驱动决策在各行各业的重要性不断增加,掌握这些技能将使你在职场中更具价值,为你的职业发展铺平道路。

通过不断实践和应用这些技巧,你将能够创建更加专业、有说服力的数据分析报告,为组织提供更准确的洞察和建议,最终成为团队中不可或缺的数据分析专家。
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则