Pandas高阶用法之数据清洗与高效分析的完整指南

Written by

in

文章目录
  • 在数据科学和数据分析领域,Pandas无疑是Python生态系统中最强大的数据处理库之一。本文将深入探讨Pandas的高阶用法,重点介绍数据清洗和高效分析的技巧,帮助您从Pandas初级用户成长为高级数据分析师。
  • Series与DataFrame import pandas as pd # 创建Series s = pd.Series([1, 3, 5, np.nan, 6, 8]) # 创建DataFrame df = pd.DataFrame({ ‘A’: 1., ‘B’: pd.Timestamp(‘20230101’), ‘C’: pd.Series(1, index=list(range(4)), dtype=’float32′), ‘D’: np.array([3] * 4, dtype=’int32′), ‘E’: pd.Categorical([“test”, “train”, “test”, “train”]), ‘F’: ‘foo’ })
  • 本文全面介绍了Pandas在数据清洗和高效分析方面的高阶用法,包括: 高级数据清洗技巧:缺失值处理、异常值检测与处理、数据转换 高效数据分析方法:高性能数据处理、高级分组操作、时间序列分析 数据可视化集成:直接绘图方法和高级可视化技巧 性能优化技巧:数据类型优化、避免链式赋值、并行处理 实战案例:电商数据分析中的RFM模型应用 掌握这些高阶技巧后,您将能够更加高效地处理和分析各种复杂的数据集,为数据驱动的决策提供有力支持。记住,熟练使用Pandas的关键在于不断实践和探索其丰富的功能。 到此这篇关于Pandas高阶用法之数据清洗与高效分析的完整指南的文章就介绍到这了,更多相关Pandas数据清洗与高效分析内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: pandas实现数据读取&清洗&分析的项目实践 深入探讨Pandas数据清洗与高效分析 python pandas模块进行数据分析 Python基础教程之Pandas数据分析库详解 Pandas 数据清洗的具体使用 利用pandas进行数据清洗的7种方式
  • 目录
    • 一、前言
    • 二、Pandas核心数据结构回顾
    • 三、高级数据清洗技巧
      • 3.1 缺失值处理
      • 3.2 异常值处理
      • 3.3 数据转换
    • 四、高效数据分析技巧
      • 4.1 高性能数据处理
      • 4.2 高级分组操作
      • 4.3 时间序列分析
    • 五、数据可视化集成
      • 5.1 直接绘图
      • 5.2 高级可视化技巧
    • 六、性能优化技巧
      • 6.1 使用高效数据类型
      • 6.2 避免链式赋值
      • 6.3 使用并行处理
    • 七、实战案例:电商数据分析
      • 7.1 数据准备
      • 7.2 RFM分析
    • 八、总结

      在数据科学和数据分析领域,Pandas无疑是Python生态系统中最强大的数据处理库之一。本文将深入探讨Pandas的高阶用法,重点介绍数据清洗和高效分析的技巧,帮助您从Pandas初级用户成长为高级数据分析师。

      Series与DataFrame

      import pandas as pd
      
      # 创建Series
      s = pd.Series([1, 3, 5, np.nan, 6, 8])
      
      # 创建DataFrame
      df = pd.DataFrame({
          'A': 1.,
          'B': pd.Timestamp('20230101'),
          'C': pd.Series(1, index=list(range(4)), dtype='float32'),
          'D': np.array([3] * 4, dtype='int32'),
          'E': pd.Categorical(["test", "train", "test", "train"]),
          'F': 'foo'
      })
      

      3.1.1 检测缺失值

      # 检测缺失值
      df.isna().sum()
      
      # 可视化缺失值
      import missingno as msno
      msno.matrix(df)
      

      3.1.2 处理缺失值

      # 删除缺失值
      df.dropna(how='any')  # 任何列有缺失就删除
      df.dropna(subset=['col1', 'col2'])  # 指定列有缺失才删除
      
      # 填充缺失值
      df.fillna(value={'col1': 0, 'col2': 'unknown'})  # 不同列不同填充值
      df.fillna(method='ffill')  # 前向填充
      df.fillna(method='bfill', limit=2)  # 后向填充,最多填充2个
      
      # 插值法填充
      df.interpolate(method='linear')  # 线性插值
      df.interpolate(method='time')  # 时间序列插值
      

      3.2.1 检测异常值

      # 使用描述性统计
      df.describe()
      
      # 使用Z-score方法
      from scipy import stats
      z_scores = stats.zscore(df['numeric_col'])
      abs_z_scores = np.abs(z_scores)
      filtered_entries = (abs_z_scores < 3)
      df_clean = df[filtered_entries]
      
      # 使用IQR方法
      Q1 = df['numeric_col'].quantile(0.25)
      Q3 = df['numeric_col'].quantile(0.75)
      IQR = Q3 - Q1
      df_clean = df[~((df['numeric_col'] < (Q1 - 1.5 * IQR)) | (df['numeric_col'] > (Q3 + 1.5 * IQR)))]
      

      3.2.2 处理异常值

      # 替换为边界值
      df['numeric_col'] = np.where(df['numeric_col'] > upper_bound, upper_bound, 
                                  np.where(df['numeric_col'] < lower_bound, lower_bound, df['numeric_col']))
      
      # 使用分箱处理
      df['binned'] = pd.cut(df['numeric_col'], bins=5, labels=False)
      

      3.3.1 标准化与归一化

      # Min-Max归一化
      df['normalized'] = (df['col'] - df['col'].min()) / (df['col'].max() - df['col'].min())
      
      # Z-score标准化
      df['standardized'] = (df['col'] - df['col'].mean()) / df['col'].std()
      

      3.3.2 类别型数据编码

      # One-Hot编码
      pd.get_dummies(df, columns=['categorical_col'])
      
      # Label编码
      from sklearn.preprocessing import LabelEncoder
      df['encoded'] = LabelEncoder().fit_transform(df['categorical_col'])
      

      4.1.1 使用eval()和query()

      # eval方法加速计算
      df.eval('new_col = col1 + col2', inplace=True)
      
      # query方法高效过滤
      df.query('col1 > col2 & col3 == "value"')
      

      4.1.2 使用category类型节省内存

      # 转换category类型
      df['category_col'] = df['category_col'].astype('category')
      
      # 查看内存使用
      df.memory_usage(deep=True)
      

      4.2.1 agg聚合函数

      # 多函数聚合
      df.groupby('group_col').agg({
          'col1': ['mean', 'max', 'min'],
          'col2': lambda x: np.percentile(x, 95)
      })
      
      # 命名聚合(Pandas 0.25+)
      df.groupby('group_col').agg(
          mean_col1=('col1', 'mean'),
          max_col2=('col2', 'max'),
          custom=('col3', lambda x: x.std() / x.mean())
      )
      

      4.2.2 transform和apply

      # transform保持原DataFrame形状
      df['group_mean'] = df.groupby('group_col')['value_col'].transform('mean')
      
      # apply灵活应用函数
      def custom_func(group):
          return (group - group.mean()) / group.std()
      
      df.groupby('group_col').apply(custom_func)
      

      4.3.1 重采样

      # 降采样
      df.resample('M').mean()  # 按月平均
      
      # 升采样
      df.resample('D').ffill()  # 按天填充
      
      # 自定义重采样
      def custom_resampler(array_like):
          return np.sum(array_like) * 1.5
      
      df.resample('W').apply(custom_resampler)
      

      4.3.2 滚动窗口计算

      # 简单滚动平均
      df.rolling(window=7).mean()
      
      # 扩展窗口
      df.expanding().sum()
      
      # 自定义滚动函数
      def custom_roll(x):
          return x[-1] * 2 + x[0]
      
      df.rolling(window=3).apply(custom_roll)
      

      # 线图
      df.plot.line(x='date_col', y=['col1', 'col2'], figsize=(12, 6))
      
      # 箱线图
      df.plot.box(column=['col1', 'col2', 'col3'])
      
      # 六边形箱图
      df.plot.hexbin(x='col1', y='col2', gridsize=20)
      

      # 使用seaborn集成
      import seaborn as sns
      sns.pairplot(df, hue='category_col')
      
      # 使用plotly交互式可视化
      import plotly.express as px
      fig = px.scatter_matrix(df, dimensions=['col1', 'col2', 'col3'], color='category_col')
      fig.show()
      

      # 优化数值类型
      df['int_col'] = pd.to_numeric(df['int_col'], downcast='integer')
      df['float_col'] = pd.to_numeric(df['float_col'], downcast='float')
      
      # 使用布尔类型
      df['bool_col'] = df['bool_col'].astype('bool')
      

      # 不好的做法 - 链式赋值
      df[df['col'] > 100]['new_col'] = 1  # 可能不会生效
      
      # 好的做法 - 使用loc
      df.loc[df['col'] > 100, 'new_col'] = 1
      

      # 使用swifter加速apply
      import swifter
      df['new_col'] = df['col'].swifter.apply(lambda x: x*2)
      
      # 使用dask处理大数据
      import dask.dataframe as dd
      ddf = dd.from_pandas(df, npartitions=4)
      result = ddf.groupby('group_col').mean().compute()
      

      # 读取数据
      orders = pd.read_csv('orders.csv', parse_dates=['order_date'])
      products = pd.read_csv('products.csv')
      customers = pd.read_csv('customers.csv')
      
      # 合并数据
      merged = pd.merge(orders, products, on='product_id')
      merged = pd.merge(merged, customers, on='customer_id')
      

      # 计算RFM指标
      now = pd.to_datetime('today')
      rfm = merged.groupby('customer_id').agg({
          'order_date': lambda x: (now - x.max()).days,  # Recency
          'order_id': 'count',  # Frequency
          'total_price': 'sum'  # Monetary
      }).rename(columns={
          'order_date': 'recency',
          'order_id': 'frequency',
          'total_price': 'monetary'
      })
      
      # RFM评分
      rfm['r_score'] = pd.qcut(rfm['recency'], q=5, labels=[5,4,3,2,1])
      rfm['f_score'] = pd.qcut(rfm['frequency'], q=5, labels=[1,2,3,4,5])
      rfm['m_score'] = pd.qcut(rfm['monetary'], q=5, labels=[1,2,3,4,5])
      rfm['rfm_score'] = rfm['r_score'].astype(str) + rfm['f_score'].astype(str) + rfm['m_score'].astype(str)
      
      # 客户分群
      segment_map = {
          r'[4-5][4-5][4-5]': '高价值客户',
          r'[3-5][3-5][3-5]': '潜力客户',
          r'[1-2][1-2][1-2]': '流失风险客户',
          r'.*': '一般客户'
      }
      rfm['segment'] = rfm['rfm_score'].replace(segment_map, regex=True)

      本文全面介绍了Pandas在数据清洗和高效分析方面的高阶用法,包括:

      高级数据清洗技巧:缺失值处理、异常值检测与处理、数据转换

      高效数据分析方法:高性能数据处理、高级分组操作、时间序列分析

      数据可视化集成:直接绘图方法和高级可视化技巧

      性能优化技巧:数据类型优化、避免链式赋值、并行处理

      实战案例:电商数据分析中的RFM模型应用

      掌握这些高阶技巧后,您将能够更加高效地处理和分析各种复杂的数据集,为数据驱动的决策提供有力支持。记住,熟练使用Pandas的关键在于不断实践和探索其丰富的功能。

      到此这篇关于Pandas高阶用法之数据清洗与高效分析的完整指南的文章就介绍到这了,更多相关Pandas数据清洗与高效分析内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

      您可能感兴趣的文章:

      • pandas实现数据读取&清洗&分析的项目实践
      • 深入探讨Pandas数据清洗与高效分析
      • python pandas模块进行数据分析
      • Python基础教程之Pandas数据分析库详解
      • Pandas 数据清洗的具体使用
      • 利用pandas进行数据清洗的7种方式

      站内搜索