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 的查询是实战高频操作,核心用 []、loc、iloc 三种方式:
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()批量处理数据。
需要我针对某个知识点(如时间序列、数据合并)展开详细讲解,或提供更多实战案例吗?

浙公网安备 33010602011771号