pandas基础操作

文章目录

    • [1. Series 与 DataFrame](#1. Series 与 DataFrame)
    • [2. 数据查看与基本信息获取](#2. 数据查看与基本信息获取)
    • [3. 数据选择与筛选](#3. 数据选择与筛选)
    • [4. 数据清洗与预处理](#4. 数据清洗与预处理)
    • [5. 数据排序与重置索引](#5. 数据排序与重置索引)
    • [6. 数据分组与聚合分析](#6. 数据分组与聚合分析)
    • [7. 数据合并](#7. 数据合并)

1. Series 与 DataFrame

Series:一维带标签数组,类似于 Excel 中的单列数据

python 复制代码
import pandas as pd
import numpy as np

# 创建 Series 的几种方式
s1 = pd.Series([10, 20, 30, 40])                    # 默认整数索引
s2 = pd.Series([100, 200, 300], index=['a', 'b', 'c'])  # 自定义标签索引
s3 = pd.Series({'北京': 2154, '上海': 2428, '广州': 1867})  # 从字典创建

DataFrame:二维表格型数据结构,是数据分析的主要载体

python 复制代码
# 创建 DataFrame
df = pd.DataFrame({
    '姓名': ['张三', '李四', '王五', '赵六'],
    '年龄': [25, 30, 35, 28],
    '城市': ['北京', '上海', '广州', '深圳'],
    '工资': [8000, 12000, 15000, 10000]
})

# 从文件读取数据(最常用)
df_csv = pd.read_csv('data.csv')        # 读取 CSV 文件
df_excel = pd.read_excel('data.xlsx')   # 读取 Excel 文件
df_json = pd.read_json('data.json')     # 读取 JSON 文件

2. 数据查看与基本信息获取

Pandas 提供了多种快速查看数据的方法。

python 复制代码
# 查看数据前几行和后几行
df.head(3)      # 查看前3行,默认5行
df.tail(2)      # 查看后2行,默认5行
df.sample(3)    # 随机查看3行,了解数据分布

# 获取数据基本信息
print(f"数据形状: {df.shape}")          # 输出 (行数, 列数)
print(f"数据维度: {df.ndim}")           # 维度数(DataFrame为2)

# 查看数据类型和内存信息
df.info()        # 显示各列数据类型、非空值数量和内存使用
df.dtypes        # 只查看各列数据类型
df.memory_usage() # 查看各列内存使用情况

# 数值型数据的统计摘要
df.describe()    # 显示计数、均值、标准差、最小值、四分位数、最大值
df.describe(include='all')  # 包含所有类型列的统计

3. 数据选择与筛选

选择列数据

python 复制代码
# 选择单列 - 返回 Series
年龄列 = df['年龄']

# 选择多列 - 返回 DataFrame
姓名年龄 = df[['姓名', '年龄']]

# 使用点表示法(列名需符合变量命名规则)
df.年龄  # 等价于 df['年龄']

选择行数据

python 复制代码
# 按标签选择(loc) - 使用索引标签
df.loc[0]           # 选择索引为0的行
df.loc[0:2]         # 选择索引0到2的行(包含2)
df.loc[[0, 2, 3]]   # 选择索引为0,2,3的行

# 按位置选择(iloc) - 使用整数位置
df.iloc[0]          # 选择第0行(从0开始计数)
df.iloc[0:3]        # 选择第0到2行(不包含3)
df.iloc[[0, 2]]     # 选择第0和第2行

# 布尔索引(条件筛选)
df[df['年龄'] > 30]                     # 年龄大于30的行
df[(df['年龄'] > 25) & (df['工资'] < 12000)]  # 多条件筛选
df[df['城市'].isin(['北京', '上海'])]    # 城市在北京或上海
df[~df['城市'].isin(['广州'])]          # 城市不是广州(~表示取反)

4. 数据清洗与预处理

数据清洗用来在数据分析中确保数据质量。

处理缺失值

python 复制代码
# 检测缺失值
df.isnull()          # 返回布尔DataFrame,显示每个单元格是否为空
df.isnull().sum()    # 统计每列缺失值数量
df.isnull().any()    # 检查每列是否有缺失值

# 处理缺失值
df.dropna()                     # 删除包含任何缺失值的行
df.dropna(axis=1)              # 删除包含任何缺失值的列
df.dropna(subset=['年龄', '工资'])  # 只删除指定列有缺失值的行

df.fillna(0)                   # 用0填充所有缺失值
df.fillna({'年龄': df['年龄'].mean()})  # 年龄列用平均值填充
df.fillna(method='ffill')      # 用前一个有效值填充(前向填充)
df.fillna(method='bfill')      # 用后一个有效值填充(后向填充)

# 插值填充
df.interpolate()               # 线性插值填充

处理重复数据

python 复制代码
# 检测重复行
df.duplicated()                # 标记重复行(除第一次出现外)
df.duplicated().sum()          # 统计重复行数量

# 删除重复行
df.drop_duplicates()                      # 删除完全重复的行
df.drop_duplicates(subset=['姓名'])       # 基于姓名列删除重复
df.drop_duplicates(subset=['姓名'], keep='last')  # 保留最后一次出现

数据类型转换

python 复制代码
# 转换数据类型
df['年龄'] = df['年龄'].astype('int32')      # 转换为32位整数
df['工资'] = df['工资'].astype('float64')    # 转换为双精度浮点数
df['入职日期'] = pd.to_datetime(df['入职日期'])  # 转换为日期时间

# 重命名列
df.rename(columns={'旧列名': '新列名'}, inplace=True)  # 重命名单个列
df.rename(columns={'姓名': '员工姓名', '年龄': '员工年龄'}, inplace=True)  # 重命名多个列
df.columns = ['列1', '列2', '列3']  # 重命名所有列

5. 数据排序与重置索引

排序和索引操作用来对数据进行组织和整理。

python 复制代码
# 按值排序
df.sort_values('年龄')                    # 按年龄升序排序
df.sort_values('年龄', ascending=False)   # 按年龄降序排序
df.sort_values(['城市', '年龄'])          # 先按城市排序,再按年龄排序
df.sort_values(['城市', '年龄'], ascending=[True, False])  # 城市升序,年龄降序

# 按索引排序
df.sort_index()              # 按索引升序排序
df.sort_index(ascending=False)  # 按索引降序排序

# 重置索引
df.reset_index()                     # 将索引转换为列,新建默认整数索引
df.reset_index(drop=True)           # 直接重置为整数索引,不保留原索引
df.reset_index(drop=True, inplace=True)  # 原地修改,不创建新对象

6. 数据分组与聚合分析

分组聚合是数据分析的核心,用于计算分组统计量。

python 复制代码
# 基本分组操作
按城市分组 = df.groupby('城市')           # 按城市分组
按城市分组.groups                        # 查看分组结果
按城市分组.size()                       # 查看每组大小

# 单列聚合
df.groupby('城市')['工资'].mean()        # 按城市计算平均工资
df.groupby('城市')['工资'].sum()         # 按城市计算工资总和
df.groupby('城市')['年龄'].max()         # 按城市计算最大年龄
df.groupby('城市')['年龄'].min()         # 按城市计算最小年龄
df.groupby('城市')['姓名'].count()       # 按城市统计人数

# 多列聚合
df.groupby('城市').agg({
    '年龄': ['mean', 'min', 'max'],
    '工资': ['sum', 'mean', 'std']
})

# 命名聚合结果
df.groupby('城市').agg(
    平均年龄=('年龄', 'mean'),
    最高工资=('工资', 'max'),
    人数=('姓名', 'count')
)

# 多级分组
df.groupby(['城市', '年龄']).mean()     # 按城市和年龄两级分组

7. 数据合并

在实际项目中,数据往往来自多个源,需要合并处理。

纵向合并(添加行)

python 复制代码
# 简单合并(要求列相同)
df_all = pd.concat([df1, df2, df3])          # 默认纵向合并
df_all = pd.concat([df1, df2], ignore_index=True)  # 忽略原索引,创建新索引

# 处理不同列的情况
df_all = pd.concat([df1, df2], sort=False)   # 保留所有列,缺失值填充NaN

横向合并(添加列)

python 复制代码
# 简单横向合并(要求行数相同)
df_combined = pd.concat([df1, df2], axis=1)
相关推荐
西岸行者6 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意6 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码6 天前
嵌入式学习路线
学习
毛小茛6 天前
计算机系统概论——校验码
学习
babe小鑫6 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms6 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下6 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。6 天前
2026.2.25监控学习
学习
im_AMBER6 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J6 天前
从“Hello World“ 开始 C++
c语言·c++·学习