【Python】Pandas库:开源数据分析工具的卓越性能与功能

文章目录

  • **一、Pandas 核心数据结构**
  • 1. **Series**
  • 2. **DataFrame**
  • **二、数据输入与输出**
  • 1. **常见格式**
  • 2. **示例**
  • **三、数据清洗与预处理**
  • 1. **处理缺失值**
  • 2. **去重**
  • 3. **数据类型转换**
  • **四、数据筛选与操作**
  • 1. **选择列**
  • 2. **选择行**
  • 3. **条件筛选**
  • 4. **新增列**
  • **五、数据聚合与统计**
  • 1. **描述性统计**
  • 2. **分组聚合**
  • 3. **透视表**
  • **六、数据合并与重塑**
  • 1. **合并数据**
  • 2. **重塑数据**
  • **七、时间序列处理**
  • 1. **时间解析**
  • 2. **时间索引**
  • 3. **时间窗口计算**
  • **八、高效操作与性能优化**
  • 1. **避免循环,使用向量化操作**
  • 2. **使用 `apply()` 优化**
  • 3. **内存优化**
  • **九、实战案例:销售数据分析**
  • 1. **数据准备**
  • 2. **分析过程**
  • 3. **输出结果**
  • **十、常见问题与解决方案**
  • **十一、学习资源推荐**

  • Pandas 库 是 Python 中一个强大的开源 数据分析工具,专注于处理结构化数据(如表格、时间序列等)。它基于 NumPy 构建,提供了高效的数据操作能力,是数据科学领域的核心工具之一。

    以下是关于
    Pandas 库 的全面详解,涵盖核心概念、功能、操作技巧及实际应用场景:


    一、Pandas 核心数据结构

    Pandas 的两种核心数据结构是 SeriesDataFrame,均基于 NumPy 数组 构建,支持高效计算。

    1. Series
  • 定义:一维带标签的数组,标签称为索引(Index)。
  • 特点
  • 数据可以是任意类型(数值、字符串、Python对象等)。
  • 索引自动生成(默认 0,1,2,...)或手动指定。
  • 示例
    import pandas as pd
    s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
    print(s['b'])  # 输出 20
    
  • 2. DataFrame
  • 定义:二维表格型数据结构,由行索引(index)和列标签(columns)组成。
  • 特点
  • 每列可以是不同的数据类型(数值、字符串、布尔值等)。
  • 类似 Excel 表格或 SQL 表。
  • 示例
    data = {
        'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'City': ['New York', 'Paris', 'London']
    }
    df = pd.DataFrame(data, index=['id1', 'id2', 'id3'])
    print(df)
    

    输出

           Name  Age      City
    id1   Alice   25  New York
    id2     Bob   30     Paris
    id3  Charlie   35    London
    

  • 二、数据输入与输出

    Pandas 支持多种数据格式的读写:

    1. 常见格式
    格式 读取函数 写入函数
    CSV pd.read_csv() df.to_csv()
    Excel pd.read_excel() df.to_excel()
    SQL pd.read_sql() df.to_sql()
    JSON pd.read_json() df.to_json()
    HTML pd.read_html() df.to_html()
    2. 示例
    # 读取 CSV 文件,指定分隔符和编码
    df = pd.read_csv('data.csv', sep=',', encoding='utf-8')
    
    # 写入 Excel 文件,忽略索引
    df.to_excel('output.xlsx', index=False)
    

    三、数据清洗与预处理

    数据清洗是数据分析的关键步骤,Pandas 提供丰富的工具:

    1. 处理缺失值
  • 检测缺失值
    df.isnull()    # 返回布尔矩阵
    df.isnull().sum()  # 每列缺失值数量
    
  • 处理方式
    df.dropna()          # 删除含缺失值的行
    df.fillna(0)         # 填充为固定值
    df.fillna(method='ffill')  # 用前一个非缺失值填充(前向填充)
    df.interpolate()     # 插值填充(如线性插值)
    
  • 2. 去重
    df.drop_duplicates(subset=['列名'], keep='first')  # 根据指定列去重
    
    3. 数据类型转换
  • 显式转换
    df['Age'] = df['Age'].astype(int)   # 转为整数
    df['Date'] = pd.to_datetime(df['Date'])  # 转为日期类型
    
  • 优化内存
    df['Category'] = df['Category'].astype('category')  # 分类类型节省内存
    

  • 四、数据筛选与操作

    1. 选择列
    df['Name']          # 返回 Series
    df[['Name', 'Age']] # 返回 DataFrame
    
    2. 选择行
  • 按位置选择
    df.iloc[0]        # 第 0 行
    df.iloc[1:3]      # 第 1 到 2 行(左闭右开)
    
  • 按标签选择
    df.loc['id1']     # 索引为 'id1' 的行
    df.loc[df['Age'] > 25]  # 筛选年龄大于 25 的行
    
  • 3. 条件筛选
    # 多条件组合(使用 &, |, ~)
    df[(df['Age'] > 25) & (df['City'] == 'Paris')]
    
    4. 新增列
    df['Birth Year'] = 2023 - df['Age']  # 计算出生年份
    df['High Age'] = df['Age'].apply(lambda x: 'Yes' if x > 30 else 'No')  # 应用函数
    

    五、数据聚合与统计

    1. 描述性统计
    df.describe()       # 数值列的统计摘要(均值、标准差、分位数等)
    df['Age'].mean()    # 平均年龄
    df.corr()           # 列之间的相关系数矩阵
    
    2. 分组聚合
    # 按城市分组,计算平均年龄和最大年龄
    grouped = df.groupby('City').agg({
        'Age': ['mean', 'max'],
        'Name': 'count'
    })
    
    3. 透视表
    # 生成按城市和年龄分组的透视表
    pivot_table = df.pivot_table(index='City', columns='Age', values='Name', aggfunc='count')
    

    六、数据合并与重塑

    1. 合并数据
  • 纵向拼接
    pd.concat([df1, df2], axis=0)  # 垂直拼接(增加行)
    
  • 横向拼接
    pd.concat([df1, df2], axis=1)  # 水平拼接(增加列)
    
  • 类似 SQL JOIN
    pd.merge(df1, df2, on='key', how='inner')  # 内连接
    
  • 2. 重塑数据
  • 宽表转长表
    pd.melt(df, id_vars=['Name'], value_vars=['Age', 'City'])
    
  • 长表转宽表
    df.pivot(index='Name', columns='City', values='Age')
    

  • 七、时间序列处理

    Pandas 对时间序列的支持尤为强大:

    1. 时间解析
    df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d')
    
    2. 时间索引
    df.set_index('Date', inplace=True)  # 将日期设为索引
    df.resample('M').mean()             # 按月重采样计算均值
    
    3. 时间窗口计算
    df['Rolling Mean'] = df['Price'].rolling(window=7).mean()  # 7 天滚动均值
    

    八、高效操作与性能优化

    1. 避免循环,使用向量化操作
  • 错误方式(逐行循环):
    for index, row in df.iterrows():
        df.loc[index, 'New'] = row['Age'] * 2
    
  • 正确方式(向量化):
    df['New'] = df['Age'] * 2
    
  • 2. 使用 apply() 优化
    df['Name Length'] = df['Name'].apply(len)  # 计算名字长度
    
    3. 内存优化
  • 使用 df.info() 查看内存占用。
  • 将字符串列转为 category 类型:
    df['City'] = df['City'].astype('category')
    

  • 九、实战案例:销售数据分析

    1. 数据准备
    data = {
        'Date': ['2023-01-01', '2023-01-01', '2023-01-02'],
        'Product': ['A', 'B', 'A'],
        'Sales': [100, 200, 150]
    }
    df = pd.DataFrame(data)
    df['Date'] = pd.to_datetime(df['Date'])
    
    2. 分析过程
    # 按日期和产品分组统计总销量
    sales_summary = df.groupby(['Date', 'Product'])['Sales'].sum().unstack()
    
    # 计算每个产品的月销量占比
    sales_summary['Total'] = sales_summary.sum(axis=1)
    sales_summary['A_Pct'] = sales_summary['A'] / sales_summary['Total']
    
    3. 输出结果
    print(sales_summary)
    

    十、常见问题与解决方案

    1. 读取大文件内存不足

    2. 分块读取:pd.read_csv('data.csv', chunksize=1000)
    3. 指定列类型:dtype={'column': 'int32'}
    4. 合并数据时键重复

    5. 使用 validate 参数检查合并类型:pd.merge(df1, df2, on='key', validate='one_to_one')
    6. 处理时区问题

    7. 转换时区:df['Date'].dt.tz_localize('UTC').dt.tz_convert('Asia/Shanghai')

    十一、学习资源推荐

  • 官方文档:Pandas Documentation
  • 书籍:《Python for Data Analysis》(作者:Pandas 创始人 Wes McKinney)
  • 实战项目:Kaggle 数据集、数据清洗挑战赛

  • 掌握 Pandas 的核心操作后,可以高效完成 数据清洗、转换、分析和可视化,为机器学习、商业分析等任务打下坚实基础。建议通过实际项目练习,逐步深入高级功能!

    作者:晴雨日记

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【Python】Pandas库:开源数据分析工具的卓越性能与功能

    发表回复