在 Python 的数据生态中,Pandas 绝对是绕不开的核心工具 —— 它就像一把为数据处理量身打造的 “瑞士军刀”,能轻松搞定数据读取、清洗、转换、分析等全流程工作。无论你是数据分析新手,还是想从 Excel/SQL 转向 Python 的从业者,掌握 Pandas 都能让你的数据处理效率提升一个量级。本文将从 Pandas 核心概念入手,结合实用代码实例,带你快速上手这款神器。
一、Pandas 是什么?
Pandas 是基于 NumPy 构建的开源 Python 库,诞生于 2008 年,核心设计目标是高效处理结构化数据(如表格、时间序列)。它提供了两种核心数据结构:Series(一维标签数组)和DataFrame(二维标签表格),并封装了大量便捷的函数,让原本需要几十行代码的操作(如数据筛选、分组统计)只需一两行就能完成。
二、快速上手:环境安装与基础操作

  1. 安装 Pandas
    首先确保已安装 Python 环境,通过 pip 一键安装:
pip install pandas numpy  # NumPy是Pandas的依赖,建议一并安装
  1. 核心数据结构
    (1)Series:一维带标签的数组
    Series由 “值(values)” 和 “索引(index)” 组成,可理解为 “带标签的一维数组”。
import pandas as pd
import numpy as np

# 1. 创建Series(默认索引为0,1,2...)
s1 = pd.Series([10, 20, 30, 40, 50])
print("基础Series:")
print(s1)
# 输出:
# 0    10
# 1    20
# 2    30
# 3    40
# 4    50
# dtype: int64

# 2. 自定义索引
s2 = pd.Series([1.5, 2.8, 3.2], index=["苹果", "香蕉", "橙子"])
print("\n自定义索引的Series:")
print(s2)
# 输出:
# 苹果    1.5
# 香蕉    2.8
# 橙子    3.2
# dtype: float64

# 3. 取值(两种方式:索引标签/位置)
print("\n取香蕉的值(标签):", s2["香蕉"])  # 2.8
print("取第一个值(位置):", s2.iloc[0])    # 1.5

(2)DataFrame:二维表格型数据
DataFrame是 Pandas 的核心,可理解为 “带行 / 列标签的表格”,每一列是一个Series,行索引统一。

# 1. 从字典创建DataFrame(最常用方式)
data = {
    "姓名": ["张三", "李四", "王五", "赵六"],
    "年龄": [22, 25, 28, 24],
    "城市": ["北京", "上海", "广州", "深圳"],
    "薪资": [8000, 12000, 10000, 9500]
}
df = pd.DataFrame(data)
print("基础DataFrame:")
print(df)
# 输出:
#    姓名  年龄  城市    薪资
# 0  张三  22  北京   8000
# 1  李四  25  上海  12000
# 2  王五  28  广州  10000
# 3  赵六  24  深圳   9500

# 2. 查看数据基本信息
print("\n数据基本信息:")
df.info()  # 查看列类型、非空值数量
# 输出:
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 4 entries, 0 to 3
# Data columns (total 4 columns):
#  #   Column  Non-Null Count  Dtype 
# ---  ------  --------------  ----- 
#  0   姓名     4 non-null      object
#  1   年龄     4 non-null      int64 
#  2   城市     4 non-null      object
#  3   薪资     4 non-null      int64 
# dtypes: int64(2), object(2)
# memory usage: 256.0+ bytes

print("\n数据统计摘要:")
print(df.describe())  # 数值列的均值、标准差、最值等
# 输出:
#          年龄           薪资
# count   4.000000      4.000000
# mean   24.750000   9875.000000
# std     2.217356   1541.103501
# min    22.000000   8000.000000
# 25%    23.500000   9125.000000
# 50%    24.500000   9750.000000
# 75%    25.750000  10500.000000
# max    28.000000  12000.000000

三、Pandas 核心操作:数据清洗与分析
实际工作中,原始数据往往存在缺失值、重复值、格式错误等问题,Pandas 提供了一套 “一站式” 清洗工具。

  1. 数据读取与保存
    Pandas 支持读取 Excel、CSV、SQL、JSON 等几乎所有常见格式,以 CSV/Excel 为例:
# 1. 读取CSV文件
# df_csv = pd.read_csv("data.csv", encoding="utf-8")

# 2. 读取Excel文件
# df_excel = pd.read_excel("data.xlsx", sheet_name="Sheet1")

# 3. 保存为CSV(处理完数据后导出)
# df.to_csv("processed_data.csv", index=False)  # index=False不保存行索引
  1. 数据筛选与切片
# 1. 按列筛选:只保留姓名和薪资列
df_sub = df[["姓名", "薪资"]]
print("\n筛选姓名和薪资列:")
print(df_sub)

# 2. 按条件筛选:薪资>9000的行
df_high_salary = df[df["薪资"] > 9000]
print("\n薪资>9000的人员:")
print(df_high_salary)

# 3. 多条件筛选(&表示且,|表示或,条件需用括号包裹)
df_filter = df[(df["年龄"] < 26) & (df["城市"] != "北京")]
print("\n年龄<26且非北京的人员:")
print(df_filter)

# 4. 按行索引筛选(iloc按位置,loc按标签)
print("\n取第2行数据(iloc):")
print(df.iloc[1])  # 索引从0开始
print("\n取姓名为王五的行(loc):")
print(df.loc[df["姓名"] == "王五"])
  1. 缺失值与重复值处理
# 构造含缺失值和重复值的测试数据
df_test = df.copy()
df_test.loc[1, "薪资"] = np.nan  # 李四薪资设为缺失值
df_test = pd.concat([df_test, df_test.iloc[2:3]], ignore_index=True)  # 重复王五行

print("\n含缺失值和重复值的DataFrame:")
print(df_test)

# 1. 检测缺失值
print("\n缺失值检测:")
print(df_test.isnull().sum())  # 统计每列缺失值数量

# 2. 填充缺失值(或删除:df_test.dropna())
df_test["薪资"] = df_test["薪资"].fillna(df_test["薪资"].mean())  # 用均值填充
print("\n填充缺失值后:")
print(df_test)

# 3. 删除重复行
df_test = df_test.drop_duplicates()
print("\n删除重复行后:")
print(df_test)
  1. 数据分组与聚合
    分组统计是数据分析的核心,Pandas 的groupby能轻松实现 “按类别统计”。
# 构造按城市分组的测试数据
df_group = pd.DataFrame({
    "城市": ["北京", "北京", "上海", "上海", "广州", "北京"],
    "部门": ["技术", "产品", "技术", "销售", "技术", "销售"],
    "薪资": [10000, 9000, 12000, 8000, 11000, 8500]
})

# 1. 按城市分组,计算薪资均值
city_salary = df_group.groupby("城市")["薪资"].mean()
print("\n各城市薪资均值:")
print(city_salary)

# 2. 多维度分组:按城市+部门,计算薪资总和与均值
group_stats = df_group.groupby(["城市", "部门"])["薪资"].agg(["sum", "mean"])
print("\n各城市各部门薪资统计:")
print(group_stats)
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐