当前位置: 首页 > news >正文

从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数据分析完成,结果已导出!")
http://www.rkmt.cn/news/1438609.html

相关文章:

  • 从‘刻舟求剑’到‘乒乓切换’:图解STM32H7中DMA双缓存与Cache的协同工作
  • 2026年评价高的庐阳区窗帘/合肥窗帘/包河区窗帘/新站区窗帘长期合作厂家推荐 - 品牌宣传支持者
  • 广度优先搜索 (BFS)
  • 2026年质量好的共挤膜气泡膜卷/彩色气泡膜卷可靠供应商推荐 - 行业平台推荐
  • 2026年比较好的梁山水处理乳品设备/梁山乳品设备/离心机乳品设备/均质机乳品设备精选推荐公司 - 行业平台推荐
  • 别再只用Aircrack了!横向评测Kismet与airodump-ng:无线网络扫描工具到底怎么选?
  • 用STM32F103和继电器DIY智能家居:低成本改造台灯与风扇的保姆级教程
  • 构建个人增强系统:从可穿戴设备到生物反馈的实践指南
  • CRAFT框架:大模型驱动的多机器人协同训练技术解析
  • 2026年知名的浙江机房建设方案/机房建设施工方案榜单优选公司 - 行业平台推荐
  • 2026年口碑好的挂布台车/多功能台车/浙江隧道台车高口碑品牌推荐 - 品牌宣传支持者
  • 【Gemini安全红皮书首发】:基于MITRE ATTCK框架的5类攻击面测绘+自动化检测脚本(限前500名开发者领取)
  • 2026年口碑好的硅岩净化板/净化板/岩棉净化板推荐品牌厂家 - 行业平台推荐
  • 基于Azure AI Studio与RAG架构构建私有数据AI助手实战指南
  • 2026年质量好的胡辣汤/逍遥镇胡辣汤/羊肉胡辣汤/面筋胡辣汤加盟热门榜 - 行业平台推荐
  • 深度学习花卉识别笔记
  • 2026年知名的均质机乳品设备/离心机乳品设备主流厂家对比评测 - 品牌宣传支持者
  • 量子密钥分发安全挑战与混合QLSTM防御方案
  • 2026年热门的安防监控弱电工程/园区门禁弱电工程/楼宇安防弱电工程专业公司推荐 - 行业平台推荐
  • DS390芯片4K SRAM配置与栈优化实战
  • Cobalt Strike上线后的实战操作指南:Beacon操控、权限提升与内网横向移动
  • 从特斯拉Optimus看具身智能:人形机器人的技术架构与工程挑战
  • 零基础入门NLP:绕过数学深坑,从实践到应用的完整指南
  • 别再逐行读文件了!Shell脚本处理文本,试试mapfile/readarray这5个高效场景
  • 不想让50G Mod塞爆C盘?手把手教你逆向修改《欧卡2》默认Mod路径(附Patch工具)
  • Cobalt Strike实战:一次完整的Windows内网提权与哈希获取过程复盘(含Mimikatz、Golden Ticket技巧)
  • 阿里面试全流程及备战攻略
  • 从手机充电器到5G基站:深入浅出聊聊TVS、压敏电阻这些‘电路保镖’是怎么工作的
  • 别再手动发通知了!用ThinkPHP 6.2 + uni-push 2.0 实现APP消息自动化推送(附完整代码)
  • 8051寄存器组管理与A51汇编器应用详解