欢迎光临
我们一直在努力

从0到1吃透Pandas!Python数据分析零基础实战教程

在Python数据分析领域,Pandas是绝对的核心工具,没有之一!无论是日常办公数据处理、大数据清洗、报表统计,还是机器学习数据预处理,Pandas都能高效搞定。

它凭借简洁的语法、强大的表格处理能力,替代了Excel的复杂操作,成为数据分析师、爬虫工程师、算法从业者的必备技能。

一、环境安装与库导入(基础必备)

使用Pandas前,需先安装库,搭配Numpy数值计算库使用,适配绝大多数数据分析场景。

1. 终端安装命令

pip install pandas numpy

2. 行业标准导入方式

所有项目统一使用该导入写法,是业内通用规范

# 导入核心库
import pandas as pd
# 导入数值计算辅助库
import numpy as np


二、两大核心数据结构(Pandas基石)

Pandas所有功能都基于两个数据结构,吃透这两个结构,就掌握了Pandas 80%的基础:

  • Series:一维带索引数组,可理解为「带标签的列表」

  • DataFrame:二维表格结构,完全对标Excel表格(行+列),最常用

1. Series 一维数据实操

支持列表、字典两种常用创建方式,附带全部核心属性查看

import pandas as pd
import numpy as np

# 方式1:通过列表创建Series(自定义索引、名称)
s1 = pd.Series([88, 92, 79, 95, 82], index=["张三", "李四", "王五", "赵六", "钱七"], name="考试成绩")
print("=== 列表创建Series ===")
print(s1)
print("数据类型:", type(s1))
print("数值数组:", s1.values)
print("索引:", s1.index)
print("数据名称:", s1.name)
print("数据类型:", s1.dtype)
print("元素个数:", s1.size)
print("维度数:", s1.ndim)
print("数据形状:", s1.shape)

# 方式2:通过字典创建Series(key为索引,value为数值)
s2 = pd.Series({"张三":88, "李四":92, "王五":79, "赵六":95, "钱七":82}, name="考试成绩")
print("\\n=== 字典创建Series ===")
print(s2)
# 随机抽取一个数据
print("随机单条数据:", s2.sample())

2. DataFrame 二维表格实操(核心)

日常数据分析99%场景都用DataFrame,通过字典创建,键为列名,值为列数据

# 构建结构化数据
data = {
"姓名": ["张三", "李四", "王五", "赵六", "钱七"],
"年龄": [18, 19, 18, 20, 19],
"分数": [88, 92, 79, 95, 82],
"班级": ["一班", "二班", "一班", "二班", "一班"]
}

# 创建DataFrame表格
df = pd.DataFrame(data)
# 打印完整表格
print(df)

输出结果(标准Excel表格格式):

姓名 年龄 分数 班级
0 张三 18 88 一班
1 李四 19 92 二班
2 王五 18 79 一班
3 赵六 20 95 二班
4 钱七 19 82 一班

三、数据读取与保存(文件交互)

Pandas支持CSV、Excel、JSON、SQL等几乎所有数据格式,其中CSV读写是日常最高频操作。

1. 新建测试CSV文件

在代码同级目录创建 student.csv,写入以下测试数据:

# 常规读取
df = pd.read_csv("student.csv")
# 兼容中文乱码(推荐固定编码格式)
df = pd.read_csv("student.csv", encoding="utf-8")
print(df)

2. 读取CSV文件

# 常规读取
df = pd.read_csv("student.csv")
# 兼容中文乱码(推荐固定编码格式)
df = pd.read_csv("student.csv", encoding="utf-8")
print(df)

3. 保存CSV文件

# index=False 核心:不保存自动生成的行索引(避免多余列)
df.to_csv("new_student.csv", index=False, encoding="utf-8-sig")


四、数据快速查看(数据分析必备前置操作)

读取数据后,优先用以下代码查看数据概况,快速了解数据结构、缺失值、统计信息

df = pd.read_csv("student.csv", encoding="utf-8")

# 查看前N行(默认前5行)
print("前5行数据:\\n", df.head())
print("前2行数据:\\n", df.head(2))

# 查看数据整体信息(列名、数据类型、缺失值、内存占用)
print("数据基本信息:")
df.info()

# 查看数值列统计信息(均值、最值、方差、分位数)
print("\\n数据统计描述:\\n", df.describe())

# 查看行索引、列名
print("行索引:", df.index)
print("所有列名:", df.columns)

# 查看数据行列数量
print(f"数据总行数:{df.shape[0]}")
print(f"数据总列数:{df.shape[1]}")


五、数据筛选与查询(最高频操作)

数据筛选是数据分析核心,包含单列/多列选取、条件筛选、模糊查询、精准定位四大场景

1. 选取指定列

df = pd.read_csv("student.csv")

# 选取单列(返回Series一维数据)
print("单列数据:\\n", df["name"])

# 选取多列(传入列表,返回DataFrame二维表格)
print("\\n多列数据:\\n", df[["name", "score"]])

2. 新手必避坑:KeyError报错解决方案

很多新手会遇到:先取单列正常,再取多列直接报错,核心原因是数据类型被覆盖:

  • df["name"]:返回Series一维数据,不再是表格

  • df[["name","score"]]:仅DataFrame二维表格支持

# 错误写法(覆盖原变量,类型报错)
# df = df["name"]
# df = df[["name", "score"]] # 报错!Series无列属性

# 正确最佳实践:新建变量存储,不覆盖原数据
s_name = df["name"]
df_sub = df[["name", "age", "score"]]

3. 条件筛选(单条件/多条件)

多条件规则:&代表且、|代表或,每个条件必须加括号

# 单条件:筛选年龄大于19岁的学生
print("年龄大于19岁:\\n", df[df["age"] > 19])

# 多条件:二班 且 分数大于90分的学生
print("\\n二班90分以上学生:\\n", df[(df["class"] == "二班") & (df["score"] > 90)])

# 或条件:年龄小于18岁 或 分数大于90分
print("\\n特殊条件学生:\\n", df[(df["age"] < 18) | (df["score"] > 90)])

4. 模糊查询

# 匹配姓名包含“张”的学生,na=False忽略空值
print("姓张的学生:\\n", df[df["name"].str.contains("张", na=False)])

5. 精准定位取值(loc/iloc)

  • loc:按标签(行索引、列名)取值

  • iloc:按数字下标取值

# 第0行、name列数据
print("loc取值:", df.loc[0, "name"])
# 第0行、第0列数据
print("iloc取值:", df.iloc[0, 0])

六、数据清洗(缺失值、重复值处理)

真实数据必然存在脏数据,数据清洗是数据分析的核心步骤,主要处理缺失值、重复值。

1. 准备含脏数据的测试文件

更新 student.csv 数据,加入缺失值、空字符串、重复值:

name,age,class,score
张三,18,一班,88
张三,18,一班,88
李四,19,二班,92
王五,,一班,79
赵六,20,,95
钱七,19,一班,
孙八,20,二班,90
,19,二班,85
"",,一班,80

2. 缺失值检测与处理
 

df = pd.read_csv("student.csv", encoding="utf-8")

# 查看所有缺失值
print("缺失值分布:\\n", df.isnull())
# 统计每列缺失值数量(核心命令)
print("\\n每列缺失值个数:\\n", df.isnull().sum())

# 精准填充:数值列用均值填充
df["age"] = df["age"].fillna(df["age"].mean())
df["score"] = df["score"].fillna(df["score"].mean())

# 删除剩余含缺失值的行
df = df.dropna()
print("\\n清洗后数据:\\n", df)

3. 重复值检测与删除

# 查看每行是否为重复行
print("重复行标记:\\n", df.duplicated())
# 统计重复行总数
print("重复行数量:", df.duplicated().sum())

# 删除完全重复行
df = df.drop_duplicates()
print("\\n去重后数据:\\n", df)

七、数据新增、修改、删除

灵活修改表格结构与数据,支持批量操作、条件新增列,可直接修改原始文件

1. 新增列(固定值/条件值)

df = pd.read_csv("student.csv")

# 新增固定值列
df["状态"] = "在校学生"

# 条件新增列:分数≥90为优秀,否则为合格
df["等级"] = np.where(df["score"] >= 90, "优秀", "合格")
print("新增列后数据:\\n", df)

2. 修改数据(单行/批量)

# 单行修改:修改第0行姓名
df.loc[0, "name"] = "张小三"

# 批量替换:将所有“一班”替换为“精英一班”
df = df.replace({"class": "一班"}, "精英一班")
print("修改后数据:\\n", df)

3. 删除列

# 删除指定列
df = df.drop(columns=["状态"])
print("删除列后数据:\\n", df)

4. 保存修改到原始文件

# 所有修改完成后,覆盖原文件或保存新文件
df.to_csv("student.csv", index=False, encoding="utf-8-sig")
# 不覆盖原文件:df.to_csv("new_student.csv", index=False)


八、分组聚合统计(Pandas核心王牌功能)

groupby 分组统计是Pandas最强大的功能,轻松实现Excel透视表效果,支持单维度、多维度统计。

# 构建干净测试数据
data = {
"姓名": ["张三", "李四", "王五", "赵六", "钱七"],
"年龄": [18, 19, 18, 20, 19],
"分数": [88, 92, 79, 95, 82],
"班级": ["一班", "二班", "一班", "二班", "一班"]
}
df = pd.DataFrame(data)

# 1. 单统计:按班级分组,求平均分
avg_score = df.groupby("班级")["分数"].mean()
print("各班平均分:\\n", avg_score)

# 2. 多维度聚合:同时求均值、最大值、最小值
stat_df = df.groupby("班级").agg({
"分数": ["mean", "max", "min"],
"年龄": "mean"
})
print("\\n多维统计数据:\\n", stat_df)

# 3. 重置索引(转为标准表格格式,解决分组后索引错乱问题)
res_df = df.groupby("班级")["分数"].mean().reset_index()
print("\\n标准表格统计结果:\\n", res_df)


九、数据排序

支持单列、多列升降序排序,适配各类数据排名场景

# 单列升序(默认):按年龄从小到大
print("年龄升序:\\n", df.sort_values("age"))

# 单列降序:按分数从大到小
print("\\n分数降序:\\n", df.sort_values("score", ascending=False))

# 多列排序:年龄升序,同年龄分数降序
print("\\n多列组合排序:\\n", df.sort_values(["age", "score"], ascending=[True, False]))

十、数据类型转换

CSV读取的数据常出现类型错乱,针对空值场景提供两种无损转换方案

df = pd.read_csv("student.csv")

# 查看各列数据类型
print("原始数据类型:\\n", df.dtypes)

# 方案1:兼容空值的整数类型 Int64(大写I,新手首选)
df["age"] = df["age"].astype("Int64")

# 方案2:填充空值后转换普通int类型
df["score"] = df["score"].fillna(0).astype(int)

# 转换为字符串类型
df["class"] = df["class"].astype(str)
print("\\n转换后数据类型:\\n", df.dtypes)


十一、完整实战案例(全流程复盘)

整合以上所有知识点,完成数据创建-筛选-统计-保存完整数据分析流程

import pandas as pd

# 1. 构建数据源
data = {
"姓名": ["小明", "小红", "小刚", "小李", "小张"],
"年龄": [20, 21, 19, 22, 20],
"成绩": [85, 92, 78, 95, 88],
"城市": ["北京", "上海", "北京", "深圳", "上海"]
}
df = pd.DataFrame(data)

# 2. 查看原始数据
print("原始数据:\\n", df.head())

# 3. 筛选优秀学生(成绩≥90)
excellent_stu = df[df["成绩"] >= 90]
print("\\n优秀学生名单:\\n", excellent_stu)

# 4. 按城市分组统计成绩
city_stat = df.groupby("城市")["成绩"].agg(["mean", "max", "min"]).reset_index()
print("\\n各城市成绩统计:\\n", city_stat)

# 5. 结果导出保存
city_stat.to_csv("城市成绩统计结果.csv", index=False, encoding="utf-8-sig")
print("\\n数据分析完成,结果已导出!")

赞(0)
未经允许不得转载:171主机测评 » 从0到1吃透Pandas!Python数据分析零基础实战教程
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址