Python数据分析下:数据分析总过程;matplotlib画图【数据的导入导出;缺失值的处理;数据类型转换;数据变形;数据分箱;时间数据处理;分组聚合】 042-pandas-数据分析步骤_哔哩哔哩_bilibili053-数据可视化-可视化介绍_哔哩哔哩_bilibili一、数据分析的完整流程已完成基础系统学习了 NumPy 数组、Pandas Series一维与 DataFrame二维三大核心数据结构。下面的课程从“基础数据结构”正式迈向了“真实数据分析流程”的实战阶段。在真实的数据分析场景中我们通常遵循以下标准化流程1、数据收集与导入概念将外部数据源如各类文件、数据库等加载到内存中。目标格式将原始数据转化为 Pandas 中的DataFrame结构以便进行后续的表格化操作。2、数据清洗这是数据分析中最关键、最耗时的一步主要包括缺失值处理检查数据中是否存在空值NaN并决定是删除还是进行填充。异常值处理识别并处理偏离正常范围的极端数据如根据业务逻辑决定是保留、删除还是替换。核心意义数据清洗的质量直接决定了最终分析结果的准确性与可靠性。3、数据可视化与分析统计分析在清洗后的干净数据基础上进行求和、平均值、最大/最小值等统计指标的计算。图表呈现由于直接观察庞大的原始数据很难发现规律必须借助数据可视化图表将信息直观地表达出来从而得出有价值的业务洞察。二、数据的导入导出Pandas 数据读写 | 菜鸟教程Pandas 数据导出 | 菜鸟教程1、CSV 文件的导入与导出【最常用】Pandas CSV 文件 | 菜鸟教程CSVComma-Separated Values逗号分隔值有时也称为字符分隔值因为分隔字符也可以不是逗号其文件以纯文本形式存储表格数据数字和文本。.csv文件每行每列都用分隔字符通常是逗号隔开CSV逗号分隔值是最常见的轻量级数据格式。1核心方法与参数读取pd.read_csv(filepath)导出df.to_csv(filepath, indexFalse)2注意事项index参数导出时默认indexTruePandas 会将行索引作为第一列写入文件。通常建议设置为False以避免产生无意义的索引列。编码问题如果 CSV 文件包含中文且读取时报错通常需要指定编码如encodingutf-8或encodinggbk。分隔符默认分隔符是逗号,。如果是制表符分隔需使用sep\t。3代码示例./data.csv如下CSV本质上是用逗号分隔的纯文本文件。该文件的内容如下ID,Name,Age,Score 1,Tom,15,65.5 2,Jack,17,80.0 3,Allen,22,55.0 4,Bob,19,72.0 5,Jerry,21,88.0import pandas as pd # 1. CSV 文件读写 # 读取 CSV 文件 df_csv pd.read_csv(./data.csv) print(CSV 数据类型:, type(df_csv)) # 输出: CSV 数据类型: class pandas.core.frame.DataFrame print(df_csv.head(), \n) # 输出示例: # ID Name Age Score # 0 1 Tom 15 65.5 # 1 2 Jack 17 80.0 # 2 3 Allen 22 55.0 # 3 4 Bob 19 72.0 # 4 5 Jerry 21 88.0 # 导出 CSV强烈推荐 indexFalse避免写入行索引 df_csv.to_csv(./export_csv.csv, indexFalse) # 导出的文件内容: # ID,Name,Age,Score # 1,Tom,15,65.5 # 2,Jack,17,80.0 # ... # 如果 indexTrue默认值导出的文件第一列会是 0, 1, 2... 的行索引 df_csv.to_csv(./export_csv_with_index.csv) # 导出的文件内容: # ,ID,Name,Age,Score # 0,1,Tom,15,65.5 # 1,2,Jack,17,80.0 # ...2、JSON 文件的读写Pandas JSON | 菜鸟教程JSON 是一种轻量级的数据交换格式常用于 API 接口和嵌套数据。1核心方法与参数读取pd.read_json(filepath)导出df.to_json(filepath, orientrecords)2注意事项嵌套结构pd.read_json()只能处理扁平化的 JSON。如果 JSON 包含嵌套的列表或字典如您示例中的{users: [...]}直接读取会导致整列变成字典对象。手动解析对于嵌套 JSON必须先使用 Python 原生的json.load()将其解析为字典/列表再提取目标列表传入pd.DataFrame()。orient参数导出 JSON 时orientrecords是最常用的格式它会输出一个包含多条记录的列表[{...}, {...}]最符合常规数据交换习惯。代码示例./data.json如下{ users: [ { id: 1, name: Alice, age: 20, gender: female }, { id: 2, name: Bob, age: 25, gender: male } ] }import pandas as pd df pd.read_json(./data.json) print(type(df),\n) # class pandas.core.frame.DataFrame print(df.head(),\n) # users # 0 {id: 1, name: Alice, age: 20, gender: female} # 1 {id: 2, name: Bob, age: 25, gender: male} 手动解析嵌套json import json with open(./data.json,r,encodingutf-8) as f: data json.load(f) print(data,\n) # {users: [{id: 1, name: Alice, age: 20, gender: female}, {id: 2, name: Bob, age: 25, gender: male}]} print(type(data),\n)#输出的格式是字典 # class dict df pd.DataFrame(data[users]) print(df.head(),\n) # id name age gender # 0 1 Alice 20 female # 1 2 Bob 25 male print(type(df),\n) # class pandas.core.frame.DataFrame # 导出 JSONorientrecords 输出列表格式 df_nested.to_json(./export_json.json, orientrecords, force_asciiFalse)3、Excel 文件的读写Pandas Excel 文件操作 | 菜鸟教程Excel 文件支持多工作表Sheet和更丰富的数据类型。1核心方法与参数读取pd.read_excel(filepath, sheet_name)导出df.to_excel(filepath, sheet_name, indexFalse)2注意事项依赖库Pandas 读写 Excel 依赖第三方库如openpyxl或xlrd需提前通过pip install openpyxl安装。sheet_name参数默认读取第一个 Sheet。可以传入字符串指定名称传入整数指定位置或传入None一次性读取所有 Sheet返回一个字典。性能Excel 文件比 CSV 大得多读取速度较慢。对于超大数据集建议转换为 CSV 或 Parquet 格式。import panda as pd # 3. Excel 文件读写 # 读取 Excel默认读取第一个 Sheet df_excel pd.read_excel(./data.xlsx, sheet_name0) print(Excel 数据类型:, type(df_excel)) print(df_excel.head(), \n) # 导出 Excel df_excel.to_excel(./export_excel.xlsx, sheet_nameSheet1, indexFalse)三、缺失值的处理Pandas 缺失值处理 | 菜鸟教程1、认识缺失值在 Pandas 中缺失值通常表现为以下几种形式NaN(Not a Number)通常出现在数值型数据中表示非数字如除以零、无穷大等。NonePython 原生的空值表示“不存在”。pd.NAPandas 引入的表示缺失值的专属对象。import pandas as pd import numpy as np # 1、认识缺失值 # Pandas 中缺失值通常表现为 NaN (数值型) 或 None (对象型) data { A: [1, 2, np.nan, 4], # 数值型缺失值表现为 NaN B: [Tom, None, Jerry, Bob], # 字符串缺失值表现为 None C: [10, 20, 30, 40] } df pd.DataFrame(data) print(【1. 原始数据】:\n, df, \n) # A B C # 0 1.0 Tom 10 # 1 2.0 None 20 # 2 NaN Jerry 30 # 3 4.0 Bob 402、检测缺失值判断是否为缺失值使用.isna()或.isnull()两者效果完全一样。对 Series 或 DataFrame 使用返回相同形状的布尔值True/False矩阵。统计缺失值个数结合.sum()使用。df.isna().sum()默认按列统计每列的缺失值数量。df.isna().sum(axis1)按行统计每行的缺失值数量。# 2、检测缺失值 # 使用 .isna() 或 .isnull() 检测返回布尔型矩阵 print(【2.1 检测缺失值】:\n, df.isna(), \n) # A B C # 0 False False False # 1 False True False # 2 True False False # 3 False False False # 结合 .sum() 统计缺失值个数 print(【2.2 按列统计缺失值个数】:\n, df.isna().sum(), \n) # A 1 # B 1 # C 0 # dtype: int64 print(【2.3 按行统计缺失值个数】:\n, df.isna().sum(axis1), \n) # 0 0 # 1 1 # 2 1 # 3 0 # dtype: int643、删除缺失值剔除核心方法是.dropna()通过调整参数可以实现不同级别的剔除默认剔除df.dropna()只要某一行中包含任何一个缺失值就删除整行。全部缺失才剔除df.dropna(howall)只有当一行的所有值都是缺失值时才删除。按阈值剔除df.dropna(threshN)保留至少有N个非缺失值的行。按列剔除df.dropna(axis1)将上述规则应用于列剔除包含缺失值的列。指定列剔除df.dropna(subset[列名])仅当指定的某列或多列存在缺失值时才删除该行。# 3、删除缺失值剔除 # 3.1 默认剔除只要某行包含任何缺失值就删除整行 print(【3.1 默认 dropna()】:\n, df.dropna(), \n) # A B C # 0 1.0 Tom 10 # 3 4.0 Bob 40 # 3.2 全部缺失才剔除只有当一行的所有值都是 NaN 时才删除 df_all_nan pd.DataFrame({A: [np.nan, 1], B: [np.nan, 2]}) print(【3.2 dropna(howall)】:\n, df_all_nan.dropna(howall), \n) # A B # 1 1.0 2 # 3.3 按阈值剔除保留至少有 N 个非缺失值的行 print(【3.3 dropna(thresh3)】:\n, df.dropna(thresh3), \n) # 只有第0行和第3行有3个非缺失值被保留 # A B C # 0 1.0 Tom 10 # 3 4.0 Bob 40 # 3.4 按列剔除剔除包含缺失值的列 print(【3.4 dropna(axis1)】:\n, df.dropna(axis1), \n) # 只有 C 列没有缺失值被保留 # C # 0 10 # 1 20 # 2 30 # 3 40 # 3.5 指定列剔除仅当指定的列存在缺失值时才删除该行 print(【3.5 dropna(subset[B])】:\n, df.dropna(subset[B]), \n) # 只有第1行的 B 列是缺失的被删除 # A B C # 0 1.0 Tom 10 # 2 NaN Jerry 30 # 3 4.0 Bob 404、填充缺失值当数据不能轻易被删除时可以使用.fillna()进行填充固定值填充df.fillna({列名: 固定值})通过传入字典为不同的列指定固定的填充值。统计值填充df.fillna(df[列名].mean())使用该列的均值、中位数等统计指标进行填充通常比固定值更科学。相邻值填充df.fillna(methodffill)用前面Front相邻的有效值向下填充。df.fillna(methodbfill)用后面Behind相邻的有效值向上填充。注在复杂的业务场景如金融、气象中还可以结合插值法Interpolation等数学公式进行更精准的填充。# 4、填充缺失值 # 4.1 固定值填充通过字典为不同列指定固定值 print(【4.1 固定值填充】:\n, df.fillna({A: 0, B: Unknown}), \n) # A B C # 0 1.0 Tom 10 # 1 2.0 Unknown 20 # 2 0.0 Jerry 30 # 3 4.0 Bob 40 # 4.2 统计值填充使用该列的均值进行填充 print(【4.2 均值填充】:\n, df.fillna({A: df[A].mean()}), \n) # A 列的均值是 (124)/3 2.333... # A B C # 0 1.000000 Tom 10 # 1 2.000000 None 20 # 2 2.333333 Jerry 30 # 3 4.000000 Bob 40 # 4.3 相邻值填充 # ffill (前向填充)用前面相邻的有效值向下填充 print(【4.3 ffill 前向填充】:\n, df.fillna(methodffill), \n) # A B C # 0 1.0 Tom 10 # 1 2.0 Tom 20 (B列用上一行的 Tom 填充) # 2 2.0 Jerry 30 (A列用上一行的 2.0 填充) # 3 4.0 Bob 40 # bfill (后向填充)用后面相邻的有效值向上填充 print(【4.4 bfill 后向填充】:\n, df.fillna(methodbfill), \n) # A B C # 0 1.0 Tom 10 # 1 2.0 Jerry 20 (B列用下一行的 Jerry 填充) # 2 4.0 Jerry 30 (A列用下一行的 4.0 填充) # 3 4.0 Bob 40四、.....项目中暂时没用上后面的都不用看了

相关新闻

最新新闻

技术博客创作指南:从主题选择到部署实践的核心要点

技术博客创作指南:从主题选择到部署实践的核心要点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/2 17:13:46
SeedRealtime:原生音视频全双工大模型如何重塑实时多模态交互

SeedRealtime:原生音视频全双工大模型如何重塑实时多模态交互

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/2 17:13:46
支付回调验签故障排查复盘:证书过期引发的线上事故

支付回调验签故障排查复盘:证书过期引发的线上事故

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/2 17:13:46
Mnemara开源项目:为AI Agent构建长期记忆层的实践指南

Mnemara开源项目:为AI Agent构建长期记忆层的实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/2 17:13:46
计算机视觉应用实践软件产品V1.0,大中专院校的低成本视觉应用实践教学实施方案

计算机视觉应用实践软件产品V1.0,大中专院校的低成本视觉应用实践教学实施方案

计算机视觉应用实践软件产品V1.0,大中专院校的低成本视觉应用实践教学实施方案 前言 在大中专院校计算机视觉课程教学实践中,普遍存在重理论、轻实操的痛点。现有教学实施方案硬件成本高、依赖软件包繁琐、实践案例不足,制约课堂实践开展。…

2026/9/2 17:13:46
记忆是编译器,不是数据库:Instinct或将揭开Agent的“第三波浪潮”

记忆是编译器,不是数据库:Instinct或将揭开Agent的“第三波浪潮”

TL;DR Agent 的下一波护城河,也许不在模型,也不在执行,而在"记忆架构"。Instinct 被资本认可,不是因为它会干活,而是因为它"记得住你、不退化"。本文拆解这套架构,并追问:它…

2026/9/2 17:08:45