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

数据科学和机器学习的“看家兵器”——pandas模块 之一

目录

  pandas 模块介绍

  4.1 pandas 数据结构

  一、课程目标

  二、Series 对象介绍

  三、DataFrame 对象介绍

  四、Series 和 DataFrame 在具体应用中的注意事项

  (一)Series 注意事项

  (二)DataFrame 注意事项

  五、实战案例

  案例 1:学生成绩分析

  案例 2:销售数据分析

  案例 3:股票数据分析

  案例 4:客户流失分析

  六、课程总结回顾

  七、课后练习题



  pandas 模块介绍

  pandas 是 Python 的一个开源数据分析库,为 Python 提供了高性能、易用的数据结构和数据分析工具。它建立在 NumPy 之上,使得以 NumPy 为中心的应用变得更加简单。pandas 的名字衍生自术语 "panel data"(面板数据)和 "Python data analysis"(Python 数据分析)。

  pandas 的主要数据结构是 Series(一维数组)和 DataFrame(二维表格型数据结构),它们能够处理各种类型的数据,无论是时间序列数据、表格数据还是矩阵数据。pandas 提供了高级数据操作功能,包括数据清洗、合并、重塑、聚合和时间序列分析等。它广泛应用于金融、经济、统计、社会科学等领域,是数据科学和机器学习工作流程中不可或缺的工具。

  4.1 pandas 数据结构

  一、课程目标

  本次课程主要围绕 pandas 的核心数据结构展开,通过理论讲解和案例分析,让学员掌握 Series 和 DataFrame 的基本概念、创建方法、数据操作及应用场景。学员学完本次课程后,能够熟练使用 pandas 进行基础的数据处理和分析工作。

  二、Series 对象介绍

  Series 是 pandas 的一维标记数组,能够保存任何数据类型(整数、字符串、浮点数、Python 对象等)。它由两部分组成:索引(index)和值(values)。索引在左侧,值在右侧。如果没有指定索引,pandas 会自动创建一个从 0 开始的整数索引。

  案例 1:基本 Series 对象的创建与操作

import pandas as pd# 创建Series对象
data = [10, 20, 30, 40, 50]
s = pd.Series(data)
print("基本Series对象:")
print(s)# 获取值
print("\nSeries的值:")
print(s.values)# 获取索引
print("\nSeries的索引:")
print(s.index)# 修改索引
s.index = ['a', 'b', 'c', 'd', 'e']
print("\n修改索引后的Series:")
print(s)# 通过索引访问值
print("\n通过索引'b'访问值:")
print(s['b'])# 通过位置访问值
print("\n通过位置2访问值:")
print(s[2])

  这个案例展示了 Series 的基本创建方法、获取值和索引的方式,以及如何修改索引和通过不同方式访问值。

  案例 2:带标签索引的 Series 对象

# 创建带标签索引的Series
data = {'北京': 1000, '上海': 1500, '广州': 800, '深圳': 1200}
s = pd.Series(data)
print("带标签索引的Series:")
print(s)# 索引顺序可以不同于字典中的键顺序
cities = ['上海', '北京', '深圳', '成都']
s = pd.Series(data, index=cities)
print("\n指定索引顺序的Series:")
print(s)# 检测缺失数据
print("\n检测缺失数据:")
print(s.isnull())# 数学运算
print("\nSeries乘以2:")
print(s * 2)# 布尔索引
print("\n筛选值大于1000的城市:")
print(s[s > 1000])

  此案例重点展示了如何使用字典创建 Series,以及如何处理缺失数据、进行数学运算和布尔索引。

  案例 3:时间序列索引的 Series 对象

# 创建时间序列索引的Series
dates = pd.date_range('20250101', periods=5)
s = pd.Series([10, 20, 30, 40, 50], index=dates)
print("时间序列索引的Series:")
print(s)# 通过日期访问值
print("\n访问2025年1月3日的值:")
print(s['2025-01-03'])# 访问某个时间段的值
print("\n访问2025年1月2日至2025年1月4日的值:")
print(s['2025-01-02':'2025-01-04'])# 时间序列切片
print("\n访问2025年1月3日及之后的值:")
print(s['2025-01-03':])# 添加新的日期值
s['2025-01-06'] = 60
print("\n添加新日期后:")
print(s)

  这个案例聚焦于时间序列索引的 Series,展示了如何创建、访问和操作时间序列数据。

  三、DataFrame 对象介绍

  DataFrame 是 pandas 的二维标记数据结构,由行索引和列索引组成。它类似于电子表格、SQL 表或 Series 对象构成的字典。DataFrame 可以接受多种类型的输入,如字典、Series、NumPy 数组、另一个 DataFrame 等。

  案例 1:基本 DataFrame 对象的创建与操作

# 创建DataFrame
data = {'城市': ['北京', '上海', '广州', '深圳', '杭州'],'人口(万)': [2154, 2424, 1490, 1303, 980],'GDP(亿)': [30320, 32680, 22859, 24222, 13509]
}
df = pd.DataFrame(data)
print("基本DataFrame对象:")
print(df)# 查看数据基本信息
print("\n数据基本信息:")
df.info()# 查看数据集行数和列数
rows, columns = df.shape# 查看数据集行数和列数
if rows < 10 and columns < 10:# 短表数据(行数少于10且列数少于10)查看全量数据信息print("\n数据全部内容信息:")print(df.to_csv(sep='\t', na_rep='nan'))
else:# 长表数据查看数据前几行信息print("\n数据前几行内容信息:")print(df.head().to_csv(sep='\t', na_rep='nan'))# 获取列
print("\n获取'城市'列:")
print(df['城市'])# 获取行
print("\n获取第2行:")
print(df.loc[1])# 添加新列
df['面积(km²)'] = [16410, 6340, 7434, 1997, 16853]
print("\n添加'面积'列后:")
print(df)# 计算人口密度
df['人口密度(人/km²)'] = df['人口(万)'] * 10000 / df['面积(km²)']
print("\n计算'人口密度'列后:")
print(df)

  这个案例展示了 DataFrame 的基本创建方法、获取行列数据的方式,以及如何添加新列和进行简单的数据计算。

  案例 2:使用不同数据源创建 DataFrame

# 从CSV文件创建DataFrame
# df = pd.read_csv('data.csv')# 从Excel文件创建DataFrame
# df = pd.read_excel('data.xlsx')# 从字典列表创建DataFrame
data = [{'姓名': '张三', '年龄': 25, '性别': '男'},{'姓名': '李四', '年龄': 30, '性别': '男'},{'姓名': '王五', '年龄': 28, '性别': '女'}
]
df = pd.DataFrame(data)
print("从字典列表创建的DataFrame:")
print(df)# 从Series字典创建DataFrame
d = {'one': pd.Series([1, 2, 3], index=['a', 'b', 'c']),'two': pd.Series([10, 20, 30, 40], index

相关文章:

  • flutter 视频通话flutter_webrtc
  • 【网络编程】八、Cookie Session 抓包原理
  • 火山引擎实时音视频 高代码跑通日志
  • 深度学习Dropout实现
  • day25-异常处理
  • Python爬虫之品牌口碑数据抓取
  • 设计模式(9)——创建型模式之工厂方法
  • golang -- 如何让main goroutine等一等
  • 微信小程序之按钮短时间内被多次点击问题
  • 【taro3 + vue3 + webpack4】在微信小程序中的请求封装及使用
  • DeepSeek 赋能 VR/AR:开启智能交互新纪元
  • 基于开源AI大模型与S2B2C生态的个人品牌优势挖掘与标签重构研究
  • vue使用路由技术实现登录成功后跳转到首页
  • Vue3在使用渲染函数h时候使用v-loading
  • 「数学::博弈论」Nim游戏(尼姆游戏)/ Luogu P2197(C++)
  • RabbitMQ是什么?应用场景有哪些?
  • 基于EMD-PCA-LSTM的光伏功率预测模型研究
  • OpenEvidence AI临床决策支持工具平台研究报告
  • 【Python】抽象基类ABC
  • 【springcloud学习(dalston.sr1)】服务消费者通过restTemplate来访问服务提供者(含源代码)(五)
  • 乌总统:若与普京会谈,全面停火和交换战俘是主要议题
  • 共情场域与可持续发展——关于博物馆、美术馆运营的新思考
  • 上海北外滩开发建设五周年交出亮眼答卷,未来五年有何新目标?
  • 第四届长三角国际应急博览会开幕,超3000件前沿装备技术亮相
  • 特朗普访中东绕行以色列,专家:凸显美以利益分歧扩大
  • 回望乡土:对媒介化社会的反思