数据仓库与数据挖掘实验练习6-7(实验四2024.5.22)

tips:

列出虚拟环境:conda env list

激活虚拟环境:activate hi

进入jupyter-lab:jupyter lab

练习6

1. 处理字符串空格

  • 发现问题: 使用 values 属性查看数据时,如果发现 Name 列没有对齐,很可能是 Name 左右存在空格。
  • 确认问题: 使用 inspection['Name'].values 查看 Name 列的值,确认是否存在空格。
  • 解决问题:
    • 使用 str 属性访问字符串方法: inspection['Name'] = inspection['Name'].str.strip()
    • lstrip(): 去掉字符串左边空格
    • rstrip(): 去掉字符串右边空格
    • strip(): 去掉字符串两边空格
  • 覆盖原数据: 使用 inspection['Name'] = inspection['Name'].str.strip() 将处理后的数据覆盖原数据,并再次使用 values 属性查看,确认空格已被去除。

2. 对所有列的字符串去空格

  • columns 属性: 使用 df.columns 查看 DataFrame 的所有列名。
  • 迭代处理: columns 属性返回的是一个可迭代的 Index 对象,可以使用循环对每个列进行处理。
    for column in df.columns:df[column] = df[column].str.strip()
    

3. 大小写转换

  • str.lower(): 将字符串转换为小写。
  • str.upper(): 将字符串转换为大写。
  • capitalize(): 将字符串首字母大写,其余字母小写。
  • title(): 将字符串中每个单词的首字母大写,其余字母小写。

4. 提取每行 Risk 的数字

  • unique(): 可以用于检查某一列中有哪些不同的值,方便我们了解数据的结构,例inspections['Risk'].unique()

16a7bbc6d6984883985a0271ce84a44e.png

1. "All":

  • All 表示所有风险等级都适用,它是一个特殊的类别,不同于 "High", "Medium", "Low" 等具体等级。
  • 在数据分析中,你需要根据具体情况决定如何处理 All
    • 保留: 如果 All 有其特殊含义,可以将其作为单独的类别进行分析。
    • 替换: 可以根据上下文将 All 替换为更具体的风险等级,例如,如果所有风险等级都适用,可以将其替换为 "High"。
    • 删除: 如果 All 没有提供额外信息,可以将其从数据中删除。

2. "nan":

  • nan 代表缺失值,表示该数据点没有记录风险等级信息。
  • 处理 nan 的方法有很多:
    • 删除: 最简单的处理方法是删除包含 nan 的行,但可能会损失信息。
    • 填充: 可以用其他值填充 nan,例如:
      • 众数填充: 用最常见的风险等级填充。
      • 均值填充: 如果是数值型风险等级,可以使用均值填充。
      • 模型预测: 可以使用机器学习模型预测缺失的风险等级。
    • 保留: 在某些情况下, nan 本身也包含信息,可以将其作为单独的类别进行分析。
  • 正则表达式: 使用 str.extract() 方法,结合正则表达式可以高效地提取数字。

    df['Risk_Num'] = df['Risk'].str.extract(r'(\d+)') 
    

#删除nan数据,保持格式一致
inspections = inspections.dropna(subset=['Risk'])

# 替换数据
inspections = inspections.replace(to_replace='All', value='Risk 4 (Extreme)')

5. 替换数据

  • replace(): 用于替换数据,可以替换单个值或多个值。

    # 替换单个值
    df['Risk'] = df['Risk'].replace('Low', '低')# 替换多个值
    df['Risk'] = df['Risk'].replace({'Low': '低', 'High': '高'})
    

6. 提取 Risk 中的数字(切片操作)

8214a7fc210e40b3a6424dbbe2cdbd65.png

3a716adea133413f8284e541e4891446.png

  • slice(): 用于提取字符串的一部分,可以通过索引或切片语法实现。
  • inspections['Risk'].str.slice(5, 6)
  • inspections['Risk'].str[5:6]
    • 提取 "high"、"medium"、"low"、"all":
      df['Risk_Level'] = df['Risk'].str.slice(start=0, stop=-4) 
      
    • 去括号:
      df['Risk_Level'] = df['Risk_Level'].str.strip('()')
      

7. 提取包含特定数据的行

93d5eda5cf42493f884f2ad705148e7d.png

  • str.contains(): 用于判断字符串是否包含某个子字符串,返回布尔值。可以结合布尔索引提取包含特定数据的行。

    # 提取包含 "High" 的行
    high_risk = df[df['Risk'].str.contains("High")] 
    

8. 找出以特定字符串开头/结尾的数据

  • str.startswith(): 判断字符串是否以某个子字符串开头,返回布尔值。

  • str.endswith(): 判断字符串是否以某个子字符串结尾,返回布尔值。

    # 提取以 "Low" 开头的 Risk 数据
    low_start = df[df['Risk'].str.startswith("Low")]# 提取以 "(1)" 结尾的 Risk 数据
    risk_1 = df[df['Risk'].str.endswith("(1)")]
    

c9ed3d063ec44ffd9f3f4e3f35d94f3a.png

4fe1ae3cc9a1475dbd315bc50b39208b.png

9. str.len()

  • 用于获取字符串的长度。

    # 获取 Risk 列字符串长度
    df['Risk_Length'] = df['Risk'].str.len()
    

10. 字符串处理(按 "-"、" " 等方式划分)

  • str.split(): 用于根据指定分隔符分割字符串,返回一个列表。

    • split(): 默认按空格分割。
    • split(pat=" "): 按空格分割。
    • split(pat=" ", n=1): 按空格分割,最多分割一次。
    # 按空格分割 Risk 列
    df['Risk_Parts'] = df['Risk'].str.split()# 按 "-" 分割,最多分割一次
    df['Risk_First_Part'] = df['Risk'].str.split("-", n=1)# 提取First name
    # 从每行的分割后的list中按照list的index提取
    customers['Name'].str.split(' ', n=1).str.get(0)# 通过get(index)获取list中指定index处的值
    # 获取last name
    customers['Name'].str.split(' ', n=1).str.get(1)# 将 split 后的多个部分分别作为列
    # 返回DataFrame
    customers['Name'].str.split(pat=' ', n=1, expand=True)# 如果没有控制 split 后得到的 list 的长度
    # pandas 会自动取最长的len(list), 且缺失值处显示 None
    customers['Name'].str.split(pat=' ', expand=True)

11.给原来的DataFrame添加新列

# 把Name拆为1 、 2
customers[
['Name1','Name2']
] = customers['Name'].str.split(pat = ' ', n = 1, expand=True)

1f12cefd7e0246719127cfe959c8afc6.png

f74b696fa8cd41dc82101fc7f62925df.png

 

 练习题

# customers.csv包括一个地址列。
# 每个地址由一条街道、城市、州和邮政编码组成。
# 分离这四个值;
# 将它们分配到DataFrame中新的Street、City、State和Zip列;
# 然后删除地址列。

customerscustomers['Address'].valuessplit_Address = customers['Address'].str.split(', ', expand=True)
split_Addresscustomers[['Street', 'City', 'State', 'Zip']] = split_Address
customers = customers.drop(labels='Address', axis='columns')
customers

练习7

MultiIndex

MultiIndex(多级索引) 允许使用多个索引级别来组织数据,从而创建出层次化的数据结构。 这使得数据的分析和操作更加灵活和强大。

1. 创建

创建 MultiIndex 的方法有很多:

  • from_tuples: 从元组列表创建 MultiIndex

import pandas as pdtuples = [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])data = pd.DataFrame({'A': [1, 2, 3, 4]}, index=index)
print(data)
  • from_arrays: 从数组列表创建 MultiIndex

arrays = [[1, 1, 2, 2], ['a', 'b', 'a', 'b']]
index = pd.MultiIndex.from_arrays(arrays, names=['first', 'second'])data = pd.DataFrame({'A': [1, 2, 3, 4]}, index=index)
print(data)
  • from_product: 从多个迭代器创建 MultiIndex

iterables = [[1, 2], ['a', 'b']]
index = pd.MultiIndex.from_product(iterables, names=['first', 'second'])data = pd.DataFrame({'A': [1, 2, 3, 4]}, index=index)
print(data)

2. 访问数据

使用 MultiIndex 可以更方便地访问和操作数据:

  • loc: 使用标签进行访问

# 获取 first 为 1,second 为 'a' 的数据
print(data.loc[(1, 'a')])# 获取 first 为 1 的所有数据
print(data.loc[1])# 获取 second 为 'a' 的所有数据
print(data.loc[:, 'a'])
  • iloc: 使用位置进行访问

# 获取第一行数据
print(data.iloc[0])# 获取前两行数据
print(data.iloc[:2])
  • xs: 访问特定级别的值

# 获取 first 为 1 的所有数据
print(data.xs(1, level='first'))# 获取 second 为 'a' 的所有数据
print(data.xs('a', level='second'))

3. 数据操作

MultiIndex 允许对数据进行更灵活的操作:

  • 排序: 可以根据不同级别的索引进行排序

# 根据 first 级别升序排序
print(data.sort_index(level='first'))# 根据 second 级别降序排序
print(data.sort_index(level='second', ascending=False))
  • 分组: 可以根据不同级别的索引进行分组

# 根据 first 级别进行分组
grouped = data.groupby(level='first')# 计算每个组的平均值
print(grouped.mean())
  • 切片: 可以根据不同级别的索引进行切片

# 获取 first 级别为 1 的所有数据
sliced = data.loc[1]# 获取 second 级别为 'a' 的所有数据
sliced = data.loc[:, 'a']

排序

facdf12ace444c47bd7f7a649a8645aa.png

查询

可以理解为数据降维

15f41e7968854c239e23f62664e3f294.png

4665726472bb489fb22aa144379f6ff8.png

import pandas as pdaddress = ('8890 Flair Square', 'Toddside', 'IL', '37206')
addressaddress = [("8809 Flair Square", "Toddside", "IL", "37206"),("9901 Austin Street", "Toddside", "IL", "37206"),("905 Hogan Quarter", "Franklin", "IL", "37206"),
]pd.MultiIndex.from_tuples(tuples=address)# 给每个level取个名字
row_index = pd.MultiIndex.from_tuples(tuples=address, names=['Street', 'City', 'State', 'Zip'])
row_index# 使用MultiIndex创建DataFrame
# 对 DataFrame 的行使用 MultiIndex
data = [['A', 'B+'],['C+', 'C'],['D-', 'A']
]
columns = ['Schools' ,'Cost of Living']
area_grades = pd.DataFrame(data=data, index=row_index, columns=columns
)area_gradesarea_grades.columnsarea_grades.index# 对 DataFrame 的列使用 MultiIndex
column_index = pd.MultiIndex.from_tuples([("Culture", "Restaurants"),("Culture", "Museums"),("Services", "Police"),("Services", "Schools"),]
)
column_index

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring模块(三)Spring AOP(2)使用

一、demo 1、spring项目 &#xff08;1&#xff09;pom <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.13.RELEASE</version></dependency>&l…

0元入驻抖音小店,真的是好事吗?

大家好&#xff0c;我是喷火龙。 抖音小店去年推出0元入驻抖音小店个人店的政策&#xff0c;简而言之就是只要一张身份证就可以开店&#xff0c;不需要营业执照&#xff0c;也不需要交保证金。 很多人一听很心动&#xff0c;因为没有任何成本就可以开店&#xff0c;于是纷纷跑…

重新思考:Netflix 的边缘负载均衡

声明 本文是对Netflix 博客的翻译 前言 ​ 在先前关于Zuul 2开源的文章中&#xff0c;我们简要概述了近期在负载均衡方面的一些工作。在这篇文章中&#xff0c;我们将更详细地介绍这项工作的原因、方法和结果。 ​ 因此&#xff0c;我们开始从Zuul和其他团队那里学习&#…

Mac上如何安装低版本chrome浏览器

背景 为了排查项目上使用chrome低版本的兼容性问题&#xff0c;需要在本机【mac系统】上安装一个低版本的chrome浏览器。 不同版本的chrome下载地址 https://www.slimjet.com/chrome/google-chrome-old-version.php 下载后要记得你下载的旧版本的版本号&#xff0c;后面修改…

ICML 2024 | 北大、字节提出新型双层位置编码方案,有效改善长度外推效果

在这项工作中&#xff0c;我们利用语言序列的内在分段特性&#xff0c;设计了一种新的位置编码方法来达到更好的长度外推效果&#xff0c;称为双层位置编码&#xff08;BiPE&#xff09;。对于每个位置&#xff0c;我们的 BiPE 融合了段内编码和段间编码。段内编码通过绝对位置…

如何恢复未保存/误删除的Excel文档?

想象一下&#xff0c;您已经在一个非常重要的 Excel 上工作了几个小时&#xff0c;而您的计算机卡住了&#xff0c;您必须重新启动计算机。Excel 文件未保存/误删除&#xff0c;您只是因为忘记点击保存按钮而损失了数小时的工作时间。但是&#xff0c;当您意识到一小时前在 Exc…

【Linux】如何优雅的检查Linux上的用户登录、关机和重启日志

在诸如Ubuntu、Debian、Linux Mint、Fedora和Red Hat等广受欢迎的Linux发行版中&#xff0c;系统会忠实记录用户的登录、关机、重启以及运行时长信息。这些信息对管理员调查事件、排查故障或汇总用户活动报告极为宝贵。 Linux系统及应用程序日志通常保存在/var/log/目录下&…

Docker CIG使用

Docker CIG是什么 CIG为&#xff1a;CAdvisor监控收集、InfluxDB存储数据、Granfana图表展示 这个组合是一个常见的监控 Docker 容器的解决方案,它包括以下三个组件: cAdvisor (Container Advisor): cAdvisor 是一个开源的容器资源监控和性能分析工具。它能够收集有关正在运行的…

【Python001】python批量下载、插入与读取Oracle中图片数据(已更新)

1.熟悉、梳理、总结数据分析实战中的python、oracle研发知识体系 2.欢迎点赞、关注、批评、指正,互三走起来,小手动起来! 文章目录 1.背景说明2.环境搭建2.1 参考链接2.2 `oracle`查询测试代码3.数据请求与插入3.1 `Oracle`建表语句3.2 `Python`代码实现3.3 效果示例4.问题链…

机器学习预测-CNN数据预测示例

介绍 这段代码是一个基于 TensorFlow 和 Keras 的深度学习模型&#xff0c;用于进行数据的回归任务。让我逐步解释一下&#xff1a; 导入必要的库&#xff1a;这里导入了 NumPy 用于数值计算&#xff0c;Pandas 用于数据处理&#xff0c;Matplotlib 用于绘图&#xff0c;Tenso…

Excel查找匹配函数(VLOOKUP):功能与应用解析

文章目录 概述VLOOKUP函数语法查询并返回单列结果查找并返回多列结果MATCH函数VLOOKUPMATCH 从右向左逆向查找&#xff1a;INDEX函数INDEXMATCH 函数匹配方式查找匹配注意事项函数名称错误: #NAME?值错误&#xff1a;#VALUE!引用错误&#xff1a;#REF!找不到数据&#xff1a;#…

amis 文件上传 大文件分块上传

amis 图片/文件上传组件 receiver&#xff1a;参数配置为上传接口。 {"type": "input-image", // "type": "input-file","label": "照片","name": "url", "imageClassName": &qu…

VUE3视频播放器 videojs-player/vue

简介 官网&#xff1a; https://gitcode.com/surmon-china/videojs-player/overviewhttps://github.com/surmon-china/videojs-player?tabreadme-ov-file video-player是一个基于video.js的视频播放器组件&#xff0c;它提供了丰富的功能&#xff0c;包括视频播放、暂停、快…

JMeter学习笔记二

面试题&#xff1a; 1.做接口测试时&#xff0c;你是怎么做的数据校验(返回值验证)&#xff1f;一般你会验证哪些数据&#xff1f; 校验code 200&#xff08;说明后端接到了你的请求&#xff0c;并且给了应答&#xff09; 返回信息 sucess 2.有1w个用户名密码需要登录&#xff…

微信小程序源码-基于Java后端的网上商城系统毕业设计(附源码+演示录像+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设…

代码随想录——找树左下角的值(Leetcode513)

题目链接 层序遍历 思路&#xff1a;使用层序遍历&#xff0c;记录每一行 i 0 的元素&#xff0c;就可以找到树左下角的值 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}*…

北核论文完美复现:自适应t分布与动态边界策略改进的算术优化算法

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 原始算术优化算法 改进点1&#xff1a;引入…

vue+css解决图片变形问题(flex-shrink: 0)

解决前 给图片添加 flex-shrink: 0;即可解决图片变形问题

基于springboot+vue的致远汽车租赁系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…