Python脚本数据分析Pandas常用哪些功能

wen 实用脚本 1

本文目录导读:

Python脚本数据分析Pandas常用哪些功能

  1. 数据读取与写入(I/O)
  2. 数据预览与基本信息
  3. 数据选择与过滤
  4. 数据清洗(重中之重)
  5. 数据分组与聚合(分组分析)
  6. 数据合并与连接
  7. 数据排序与排名
  8. 时间序列分析
  9. 常用的便捷方法
  10. 一个完整的小例子(快速体验)

Python的Pandas库是数据分析的核心工具,它提供了大量高效、灵活的数据处理功能,对于数据分析,最常用的功能可以归纳为以下几个核心方面:

数据读取与写入(I/O)

这是数据分析的第一步和最后一步。

  • 读取:
    • pd.read_csv('file.csv'):读取 CSV 文件(最常用)。
    • pd.read_excel('file.xlsx', sheet_name='Sheet1'):读取 Excel 文件。
    • pd.read_sql('SELECT * FROM table', connection):从 SQL 数据库读取。
    • pd.read_json('data.json'):读取 JSON 格式数据。
    • pd.read_parquet('data.parquet'):读取 Parquet 格式(大数据场景常用,速度极快)。
  • 写入:
    • df.to_csv('output.csv', index=False):保存为 CSV。
    • df.to_excel('output.xlsx', sheet_name='Data'):保存为 Excel。
    • df.to_sql('table_name', con, if_exists='replace'):写入数据库。

数据预览与基本信息

在拿到数据后,先了解数据的全貌。

  • df.head(n) / df.tail(n):查看前/后 n 行数据(默认 5 行)。
  • df.info():查看数据集的概览,包括索引类型、列名、非空值数量、数据类型(dtype)及内存使用量。这是最常用的诊断方法
  • df.describe():生成数值型列的描述性统计(计数、均值、标准差、最小值、四分位数、最大值)。
  • df.shape:返回 (行数, 列数) 的元组。
  • df.columns:返回列名列表。
  • df.dtypes:查看每列的数据类型。

数据选择与过滤

这是清理和准备数据时最频繁的操作。

  • 列选择:
    • df['column_name']:选择单列(返回 Series)。
    • df[['col1', 'col2']]:选择多列(返回 DataFrame)。
  • 行选择(过滤):
    • df[df['age'] > 30]:布尔索引,选择年龄大于30的行。
    • df.query('age > 30 & city == "北京"'):使用类似 SQL 的表达式进行复杂过滤(可读性高)。
  • 按位置/标签选择(.iloc.loc):
    • df.iloc[0:5, 2:4]:按整数位置选择(前5行,第2到第4列)。
    • df.loc[df['score'] > 90, ['name', 'score']]:按标签或布尔数组选择(选择分数>90的学生的名字和分数)。

数据清洗(重中之重)

现实中大部分数据都是不完美的,清洗占据了数据分析大量时间。

  • 处理缺失值:
    • df.isnull().sum():检查每列有多少缺失值。
    • df.dropna():删除包含缺失值的行(axis=0)或列(axis=1)。
    • df.fillna(value):填充缺失值(df.fillna(0)df['age'].fillna(df['age'].mean()))。
  • 处理重复值:
    • df.duplicated():检查重复行。
    • df.drop_duplicates():删除重复行(可指定 subset=['col1'] 按列去重)。
  • 数据类型转换:
    • df['date'].astype('datetime64[ns]'):转换列的数据类型。
    • pd.to_datetime(df['date_column']):万能日期类型转换函数。
    • df['price'].astype(float):转换为浮点数。
  • 修改列名:
    • df.rename(columns={'old_name': 'new_name'})
    • df.columns = ['new_col1', 'new_col2'] (直接赋值,必须长度相同)。
  • 替换与映射:
    • df['gender'].replace({'男': 1, '女': 0}):替换值。
    • df['category'].map({'A': '优秀', 'B': '良好'}):映射新值。

数据分组与聚合(分组分析)

这是数据分析的核心,用于探索各维度的统计规律。

  • 基础分组:
    • df.groupby('department')['salary'].mean():按部门分组,计算平均工资。
  • 多列分组与多聚合:
    • df.groupby(['city', 'gender']).agg({'age': 'mean', 'income': 'sum', 'id': 'count'}):按城市和性别分组,同时计算平均年龄、收入总和、用户数量。
  • 常用聚合函数: sum()mean()count()max()min()std()var()median()
  • 透视表(Pivot Tables):
    • pd.pivot_table(df, values='sales', index='region', columns='month', aggfunc='sum', fill_value=0):生成类似 Excel 透视表的交叉分析报表。

数据合并与连接

当数据分散在多个表时,需要将它们合并。

  • 类似 SQL 的 Join:
    • pd.merge(df1, df2, on='key', how='inner'):内连接(inner),外连接(leftrightouter)。
  • 按行/列拼接:
    • pd.concat([df1, df2], axis=0):纵向拼接(增加行)。
    • pd.concat([df1, df2], axis=1):横向拼接(增加列)。

数据排序与排名

  • 排序:
    • df.sort_values(by='price', ascending=False):按价格降序排列。
    • df.sort_index():按行索引排序。
  • 排名:
    • df['rank'] = df['score'].rank(method='dense', ascending=False):为分数排名(dense 方法确保并列不占位次)。

时间序列分析

  • 创建日期范围:
    • pd.date_range('2024-01-01', periods=100, freq='D') 生成日期序列。
  • 设置时间索引:
    • df.set_index('date', inplace=True):将日期列设为索引。
  • 重采样:
    • df.resample('M').mean():按月(M)重采样,计算月均值。
    • df.resample('W').sum():按周求和。
  • 移动窗口与差分:
    • df['sales_ma'] = df['sales'].rolling(window=7).mean():计算7日移动平均线。
    • df['sales_diff'] = df['sales'].diff():计算环比差值。

常用的便捷方法

  • df.apply(func, axis=1):对每一行或每一列应用自定义函数。注意:如果追求性能,优先考虑向量化操作或 transform
  • df.transform(func):执行与 groupby 结合的分组变换(计算组内百分比)。
  • df.pipe(func):实现函数式编程,将整个 DataFrame 传递给一个函数,非常利于创建可读性高的数据处理管道。
  • df.sample(n=10):随机抽取 n 行数据。

一个完整的小例子(快速体验)

import pandas as pd
import numpy as np
# 1. 读取数据
df = pd.read_csv('sales_data.csv')  # 假设有这样一个文件
# 2. 预览
print(df.head())
print(df.info())
# 3. 清洗
df.dropna(subset=['price'], inplace=True)  # 删除价格缺失的行
df['date'] = pd.to_datetime(df['date'])   # 转换日期格式
df.fillna({'quantity': 0}, inplace=True)  # 数量缺失填充0
# 4. 分析:按类别统计总销售额
df['total_sales'] = df['price'] * df['quantity']
category_summary = df.groupby('category')['total_sales'].sum().sort_values(ascending=False)
print(category_summary)
# 5. 时间序列:按周统计销量趋势
weekly_sales = df.set_index('date').resample('W')['total_sales'].sum()
print(weekly_sales.head(10))

如果你刚开始学,建议先重点掌握 1-5 部分(读写、预览、选择、清洗、分组),它们能覆盖日常工作中 80% 以上的场景,Pandas 官方文档的 10 Minutes to pandas 是极好的入门教程。

抱歉,评论功能暂时关闭!