Pandas 入门教程:从安装到核心操作(零基础友好)

Pandas 入门教程:从安装到核心操作(零基础友好)

Pandas 是 Python 数据分析的“瑞士军刀”,基于 NumPy 构建,专为表格数据处理设计。本教程从安装到核心操作,用通俗语言+实战代码,帮你快速上手 Pandas 核心能力。

一、环境准备:安装 Pandas

1. 安装命令(终端/命令行)

# 基础安装(推荐,自动兼容已安装的 NumPy)
pip install pandas

# 镜像源加速(国内用户优先,避免下载超时)
pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple

2. 验证安装(Python 交互式环境)

import pandas as pd
import numpy as np

# 打印版本号(确认安装成功,推荐 1.0+ 版本)
print(pd.__version__)  # 输出示例:2.1.4

二、核心数据结构:Series 与 DataFrame

Pandas 有两个核心数据结构,所有操作都围绕它们展开:

1. Series:一维带标签数组

可理解为“列表+自定义标签”,适合存储单一维度数据(如某指标序列)。

(1)创建 Series

# 方式1:从列表创建(默认整数索引)
s1 = pd.Series([10, 20, 30, 40])
print("s1:\n", s1)
# 输出:
# 0    10
# 1    20
# 2    30
# 3    40
# dtype: int64

# 方式2:自定义索引(标签可重复、可非整数)
s2 = pd.Series([10, 20, 30], index=["北京", "上海", "广州"], name="温度")
print("\ns2:\n", s2)
# 输出:
# 北京    10
# 上海    20
# 广州    30
# Name: 温度, dtype: int64

# 方式3:从字典创建(键=索引,值=数据)
s3 = pd.Series({"苹果": 5.99, "香蕉": 3.99, "橙子": 4.99})
print("\ns3:\n", s3)

(2)Series 核心属性

print("数据值:", s2.values)  # 底层 ndarray 数据([10 20 30])
print("索引:", s2.index)    # 索引对象(Index(['北京', '上海', '广州'], dtype='object'))
print("数据类型:", s2.dtype)# 数据类型(int64)
print("名称:", s2.name)     # 序列名称(温度)

(3)Series 取值操作

# 按索引标签取值(推荐,不受位置影响)
print(s2["上海"])  # 输出:20

# 按位置取值(类似列表)
print(s2.iloc[1])  # 输出:20(索引"上海"在第1位,从0开始)

# 切片取值(含头含尾,与列表不同)
print(s2["北京":"广州"])  # 输出所有元素

2. DataFrame:二维带标签表格

可理解为“多个 Series 按列拼接”,对应 Excel 表格/SQL 表,是数据分析的核心载体。

(1)创建 DataFrame

# 方式1:从字典创建(键=列名,值=列表/Series)
data = {
    "姓名": ["张三", "李四", "王五", "赵六"],
    "年龄": [25, 30, 35, 28],
    "城市": ["北京", "上海", "广州", "深圳"],
    "薪资": [15000, 20000, 18000, 16000]
}
df = pd.DataFrame(data)  # 默认整数行索引(0,1,2,3)
print("df:\n", df)

# 方式2:自定义行索引(index 参数)
df2 = pd.DataFrame(data, index=["员工1", "员工2", "员工3", "员工4"])
print("\ndf2:\n", df2)

# 方式3:从 CSV/Excel 读取(实战常用,后续详解)
# df3 = pd.read_csv("数据文件.csv")  # 读取 CSV
# df4 = pd.read_excel("数据文件.xlsx")  # 读取 Excel(需安装 openpyxl:pip install openpyxl)

(2)DataFrame 核心属性

print("形状(行×列):", df.shape)  # 输出:(4, 4)(4行4列)
print("列名:", df.columns)        # 输出列索引(Index(['姓名', '年龄', '城市', '薪资'], dtype='object'))
print("行索引:", df.index)        # 输出行索引(RangeIndex(start=0, stop=4, step=1))
print("数据类型:\n", df.dtypes)   # 每列数据类型
print("前3行数据:\n", df.head(3)) # 快速查看前 N 行(默认5行)
print("后2行数据:\n", df.tail(2)) # 快速查看后 N 行

三、数据查询:按行/列/条件筛选

DataFrame 的查询是实战高频操作,核心用 []lociloc 三种方式:

1. 按列查询(取整列)

# 方式1:直接用列名(推荐,最简单)
df_age = df["年龄"]  # 返回 Series
print("年龄列(Series):\n", df_age)

# 方式2:取多列(列名用列表包裹)
df_sub = df[["姓名", "城市", "薪资"]]  # 返回 DataFrame
print("\n多列数据(DataFrame):\n", df_sub)

2. 按行查询(取整行)

# 方式1:iloc 按位置取行(类似列表索引)
row1 = df.iloc[0]  # 取第0行(张三)
row2_3 = df.iloc[1:3]  # 取第1-2行(左闭右开)
print("第0行:\n", row1)
print("\n第1-2行:\n", row2_3)

# 方式2:loc 按标签取行(自定义索引时常用)
row_emp2 = df2.loc["员工2"]  # 取"员工2"行
print("\n员工2行:\n", row_emp2)

3. 按条件筛选(实战核心)

# 条件1:年龄>30
df_age_gt30 = df[df["年龄"] > 30]
print("年龄>30的员工:\n", df_age_gt30)

# 条件2:城市是北京 且 薪资>15000(多条件用 &,每个条件加括号)
df_beijing_highsalary = df[(df["城市"] == "北京") & (df["薪资"] > 15000)]
print("\n北京且薪资>15000的员工:\n", df_beijing_highsalary)

# 条件3:城市是上海或深圳(用 | 表示“或”)
df_sh_sz = df[df["城市"].isin(["上海", "深圳"])]
print("\n上海或深圳的员工:\n", df_sh_sz)

四、数据清洗:处理缺失值与重复值

真实数据常含缺失值(NaN)、重复值,Pandas 提供简洁的处理方法:

1. 缺失值处理

# 先创建含缺失值的 DataFrame
df_missing = pd.DataFrame({
    "A": [1, 2, None, 4],
    "B": [5, None, 7, 8],
    "C": [9, 10, 11, 12]
})
print("含缺失值的 DataFrame:\n", df_missing)

# (1)查看缺失值(每列缺失个数)
print("\n每列缺失值个数:\n", df_missing.isnull().sum())

# (2)删除缺失值(axis=0删行,axis=1删列;how="any"有一个缺失就删)
df_drop = df_missing.dropna(axis=0, how="any")  # 删除含缺失值的行
print("\n删除缺失值后的 DataFrame:\n", df_drop)

# (3)填充缺失值(用均值/固定值填充)
df_fill = df_missing.fillna({
    "A": df_missing["A"].mean(),  # A列用均值填充
    "B": 0  # B列用0填充
})
print("\n填充缺失值后的 DataFrame:\n", df_fill)

2. 重复值处理

# 创建含重复值的 DataFrame
df_duplicate = pd.DataFrame({
    "姓名": ["张三", "李四", "张三", "王五"],
    "年龄": [25, 30, 25, 35],
    "城市": ["北京", "上海", "北京", "广州"]
})
print("含重复值的 DataFrame:\n", df_duplicate)

# (1)查看重复值(默认判断所有列都相同)
print("\n重复行:\n", df_duplicate.duplicated())

# (2)删除重复值(keep="first"保留第一行,keep=False删除所有重复行)
df_unique = df_duplicate.drop_duplicates(keep="first")
print("\n删除重复值后的 DataFrame:\n", df_unique)

五、数据运算:列级操作与统计分析

Pandas 支持向量化运算(无需循环),统计分析只需一行代码:

1. 列级运算(加减乘除)

# 新增列:薪资税后(假设税率20%)
df["薪资税后"] = df["薪资"] * 0.8
print("新增税后薪资列:\n", df[["姓名", "薪资", "薪资税后"]])

# 列与列运算:年龄+5
df["年龄+5"] = df["年龄"] + 5
print("\n年龄+5列:\n", df[["姓名", "年龄", "年龄+5"]])

2. 统计分析(描述性统计)

# 数值列的基础统计(均值、标准差、最值等)
print("数值列统计信息:\n", df[["年龄", "薪资", "薪资税后"]].describe())

# 单独计算统计量
print("\n薪资均值:", df["薪资"].mean())  # 均值
print("薪资中位数:", df["薪资"].median())  # 中位数
print("薪资最大值:", df["薪资"].max())  # 最大值
print("薪资最小值:", df["薪资"].min())  # 最小值
print("薪资总和:", df["薪资"].sum())  # 总和
print("城市分布:\n", df["城市"].value_counts())  # 分类计数(非数值列可用)

六、数据保存:导出为 CSV/Excel

分析完成后,将结果保存为文件:

# 保存为 CSV(默认不保存索引,index=False 避免冗余)
df.to_csv("员工数据分析结果.csv", index=False, encoding="utf-8-sig")

# 保存为 Excel(需安装 openpyxl 库)
df.to_excel("员工数据分析结果.xlsx", index=False, sheet_name="员工数据")

print("文件保存成功!")

七、实战小案例:员工薪资分析

用以上知识点完成一个简单实战:

# 1. 读取数据(假设已保存员工数据为 CSV)
df_emp = pd.read_csv("员工数据.csv")

# 2. 数据探索:查看基本信息
print("数据形状:", df_emp.shape)
print("前5行:\n", df_emp.head())
print("缺失值统计:\n", df_emp.isnull().sum())

# 3. 数据清洗:填充缺失的薪资(用均值)
df_emp["薪资"] = df_emp["薪资"].fillna(df_emp["薪资"].mean())

# 4. 数据分析:
# (1)各城市员工数量
city_count = df_emp["城市"].value_counts()
print("\n各城市员工数量:\n", city_count)

# (2)各城市平均薪资
city_avg_salary = df_emp.groupby("城市")["薪资"].mean().round(2)
print("\n各城市平均薪资:\n", city_avg_salary)

# (3)筛选30岁以下的高薪资员工(薪资>18000)
young_high_salary = df_emp[(df_emp["年龄"] < 30) & (df_emp["薪资"] > 18000)]
print("\n30岁以下高薪资员工:\n", young_high_salary)

# 5. 保存结果
young_high_salary.to_csv("30岁以下高薪资员工.csv", index=False, encoding="utf-8-sig")
print("\n结果保存成功!")

八、核心总结与进阶方向

1. 入门核心要点

  • 记住两个数据结构:Series(一维)、DataFrame(二维);
  • 掌握三大查询方式:[](列/条件)、loc(标签)、iloc(位置);
  • 数据清洗核心:缺失值(dropna/fillna)、重复值(duplicated/drop_duplicates);
  • 统计分析:describe() 一键获取基础统计,groupby() 分组分析。

2. 进阶方向

  • 数据合并:merge()(类似 SQL 连接)、concat()(拼接);
  • 时间序列:to_datetime() 处理时间数据,resample() 时间采样;
  • 透视表:pivot_table() 快速生成汇总表格;
  • 性能优化:astype() 优化数据类型(如 category 压缩字符串)、apply() 批量处理数据。

需要我针对某个知识点(如时间序列、数据合并)展开详细讲解,或提供更多实战案例吗?

posted @ 2025-11-25 12:14  wangya216  阅读(620)  评论(0)    收藏  举报