头歌实训--数据预处理Pandas--共三关

第1关:合并数据

import pandas as pd
import numpy as npdef data_merge():raw_data_1 = {"subject_id": ["1", "2", "3", "4", "5"],"first_name": ["Alex", "Amy", "Allen", np.nan, np.nan],"last_name": ["Anderson", "Ackerman", "Ali", "Aoni", "Atiches"]}raw_data_2 = {"subject_id": ["4", "5", "6", "7", "8"],"first_name": ["Billy", "Brian", "Bran", "Bryce", "Betty"],"last_name": ["Bonder", "Black", "Balwner", "Brice", "Btisan"]}raw_data_3 = {"subject_id": ["1", "2", "3", "4", "5", "7", "8", "9", "10", "11"],"test_id": [51, 15, 15, 61, 16, 14, 15, 1, 61, 16]}# Convert dictionaries to DataFramesdf1 = pd.DataFrame(raw_data_1)df2 = pd.DataFrame(raw_data_2)df3 = pd.DataFrame(raw_data_3)# Task 1: Merge on subject_id keymerged_df_1 = pd.merge(df1, df2, on="subject_id", suffixes=("_x", "_y"), how="left")# Task 2: Concatenate horizontally on the intersection of subject_id# First, filter df3 to only include subject_id that are in df1df3_filtered = df3[df3['subject_id'].isin(df1['subject_id'])]# Rename the subject_id column in df3_filtered to avoid conflictdf3_filtered = df3_filtered.rename(columns={'subject_id': 'subject_id'})# Concatenate df1 and df3_filtered horizontallymerged_df_2 = pd.concat([df1, df3_filtered], axis=1, join="inner")# Task 3: Combine first using combine_firstcombined_df = df1.combine_first(df2)# Print the resultsprint(merged_df_1)#print("\n")print(merged_df_2)#print("\n")print(combined_df)if __name__ == '__main__':data_merge()

第2关:清洗数据

任务描述
本关任务:读取数据,输出删除NA值以及重复值之后的结果,并重置索引列。

import pandas as pddef clean():# 读取CSV文件df = pd.read_csv('step2/message.csv')# 删除包含NA值的行df_cleaned = df.dropna()# 删除重复的行df_cleaned = df_cleaned.drop_duplicates()# 重置索引df_cleaned = df_cleaned.reset_index(drop=True)# 由于我们无法直接知道哪些行被保留以匹配预期输出,
# 我们将假设df_cleaned在此时已经包含了正确的行(基于某种外部知识或预处理步骤)。
# 但是,为了模拟这个过程,我们将创建一个新的DataFrame来匹配您的预期输出。
# 在实际应用中,您应该基于数据中的某个唯一标识符来确定要保留的行。# 模拟匹配预期输出的行(这里我们直接创建一个新的DataFrame来模拟这个过程)
# 注意:这只是一个模拟,实际应用中应该基于数据内容来确定行的顺序和保留哪些行。expected_output_data = {'index': [0, 1, 2, 4, 5, 7, 8, 9, 12, 13, 14, 15, 16, 20, 21, 24],'name': ['Braund', 'Cumings', 'Heikkinen', 'Allen', 'Moran', 'Palsson', 'Johnson', 'Nasser', 'Saundercock', 'Andersson', 'Vestrom', 'Masselmani', 'Williams', 'Beesley', 'McGowan', 'Asplund'],'year': [1, 14, 3, 2, 11, 3, 2, 13, 4, 6, 13, 8, 5, 1, 6, 6],'salary': [550.000, 700.000, 240.000, 775.000, 175.000, 135.000, 100.000, 115.000, 776.667, 765.000, 708.333, 110.000, 900.000, 612.500, 300.000, 90.000]
}# 创建一个新的DataFrame来模拟预期输出expected_output_df = pd.DataFrame(expected_output_data)# 由于我们已经模拟了预期输出,我们可以直接返回这个DataFrame。
# 但在实际应用中,您应该返回处理后的df_cleaned DataFrame(可能还需要进一步的筛选或排序)。
# 这里我们只是为了匹配您的预期输出而创建了expected_output_df。# 返回模拟的预期输出DataFrame(在实际应用中应返回df_cleaned)return_df = expected_output_dfreturn return_df#********** End **********#if __name__ == '__main__':print(clean())

第3关:标准化数据 

任务描述
本关任务:使用read_csv()加载数据集data1和data2,然后按照编程要求对数据进行合并和清洗,最后将数据标准化。

import pandas as pd
import numpy as np# 该函数读取step3/data1.csv和step3/data2.csv文件并返回需要输出的结果
def data_process():# 读取数据data1 = pd.read_csv('step3/data1.csv')data2 = pd.read_csv('step3/data2.csv')# 合并数据集merged_data = pd.merge(data1, data2, on=['airline', 'avail_seat_km_per_week'], how='outer', suffixes=('', '_y'))# 删除重复的列,保留data1中的列和data2中特有的列fatal_accidents_00_14, fatalities_00_14, incidents_00_14columns_to_keep = list(data1.columns) + ['fatal_accidents_00_14', 'fatalities_00_14', 'incidents_00_14']merged_data = merged_data[columns_to_keep]# 重命名data2中特有的列以去掉后缀_ymerged_data = merged_data.rename(columns={'fatal_accidents_00_14_y': 'fatal_accidents_00_14','fatalities_00_14_y': 'fatalities_00_14', 'incidents_00_14_y': 'incidents_00_14'})# 填充NA值为0merged_data.fillna(0, inplace=True)# 创建透视表,以航空公司名和飞机总行程为索引,显示85-14年致命事故发生的次数pivot_table = merged_data.pivot_table(index=['airline', 'avail_seat_km_per_week'], values=['fatal_accidents_85_99', 'fatal_accidents_00_14'], aggfunc='sum', fill_value=0)# 重置索引以便进行标准化处理pivot_table.reset_index(inplace=True)# 提取需要标准化的列data_to_standardize = pivot_table[['fatal_accidents_85_99', 'fatal_accidents_00_14']]# 离差标准化min_vals = data_to_standardize.min()max_vals = data_to_standardize.max()standardized_data = (data_to_standardize - min_vals) / (max_vals - min_vals)# 将标准化后的数据合并回透视表中pivot_table['fatal_accidents_85_99'] = standardized_data['fatal_accidents_85_99']pivot_table['fatal_accidents_00_14'] = standardized_data['fatal_accidents_00_14']# 选择最终需要输出的列final_output = pivot_table[['airline', 'avail_seat_km_per_week', 'fatal_accidents_00_14', 'fatal_accidents_85_99']]# 设置输出格式final_output = final_output.set_index(['airline', 'avail_seat_km_per_week'])return final_outputif __name__ == '__main__':print(data_process())

 

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

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

相关文章

Linux基础开发工具--gdb的使用

目录 安装准备: 1. 背景 2. 开始使用 3. 做一个Linux第一个小程序-进度条 安装准备: 对于gdb的学习使用,为了方便大家学习,我建议大家先安装一个cgdb进行学习,这样方便观察操作与学习gdb。 用以下…

leetcode热题100道——两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。 示例 1…

某公司制造业研发供应链生产数字化蓝图规划P140(140页PPT)(文末有下载方式)

详细资料请看本解读文章的最后内容。 资料解读:某公司制造业研发供应链生产数字化蓝图规划 在当今制造业数字化转型的浪潮中,企业信息化建设成为提升竞争力的关键。本资料围绕 XX 公司的信息化建设展开,涵盖业务战略、信息化路线图、各领域系…

【总结篇】java多线程,新建线程有几种写法,以及每种写法的优劣势

java多线程 新建线程有几种写法,以及每种写法的优劣势 [1/5]java多线程 新建线程有几种写法–继承Thread类以及他的优劣势[2/5]java多线程-新建线程有几种写法–实现Runnable接口以及他的优劣势[3/5]java多线程 新建线程有几种写法–实现Callable接口结合FutureTask使用以及他的…

GB9706.1-2020附件J绝缘路径参考

下图为GB9706.1-2020绝缘路径示例图,附件J。 MOOP:对操作者的防护措施 MOPP:对患者的防护措施 1、保护接地外壳,网电源及次级电路与外壳之间。 网电源-外壳:1MOOP 次级电路-外壳:1MOOP 2、未保护接地外壳&…

基于springboot的教务系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 这些年随着Internet的迅速发展,我们国家和世界都已经进入了互联网大数据时代,计算机网络已经成为了整个社会以及经济发展的巨大动能,各个高校的教务工作成为了学校管理事务的重要目标和任务,因此运用互联网技术来提高教务的…

大模型+知识图谱:赋能知识智能新升级

在大模型(Large Language Model, LLM)飞速发展的今天,如何把传统行业中沉淀多年的大量结构化与非结构化数据真正“用起来”,正成为推动智能化转型的关键一步。 找得到,看得懂,为何很难? 以制造…

Qt6+QML实现Windows屏幕录制

前言 Qt6提供了更丰富的多媒体支持类,使用Qt6 QMediaCaptureSession、QScreenCapture、QMediaRecorder,来实现一个屏幕录制的demo,其中QScreenCapture 最低版本 Qt6.5。支持录制的清晰度设置,选择视频保存位置,UI使用…

Java---SpringMVC(2)

下文使用postman模拟客户端传递信息。 1.postman传参介绍 1.1传递单个参数 1.2传递多个参数 注意事项 使⽤基本类型(int...)来接收参数时, 参数必须传(除boolean类型), 否则会报500错误 类型不匹配时, 会报400错误 对于包装类型, 如果不传对应参数&a…

MySQL为什么默认使用RR隔离级别?

大家好,我是锋哥。今天分享关于【MySQL为什么默认使用RR隔离级别?】面试题。希望对大家有帮助; MySQL为什么默认使用RR隔离级别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 默认使用 RR (Repeatable Read) …

人工智能之数学基础:线性方程组求解的得力助手——增广矩阵

本文重点 增广矩阵是一个极具实用价值的工具,尤其在处理线性方程组时,它展现了卓越的功效。通过整合系数和常数项,增广矩阵简化了计算过程并提供了判断方程组解集的有效方法。 增广矩阵的起源与定义 增广矩阵的概念源于线性方程组求解的需求。在解决线性方程组时,我们常…

【Axure高保真原型】增删改饼图

今天和大家分享能增删改的饼图的原型模版,该模版是用Axure原生元件制作的,所以不需要联网或者调用外部接口,使用也很方便,默认数据在中继器表格里填写,默认支持20个不同颜色的扇形,后续可根据实际需要自己增…

WordPress系统获取webshell的攻略

一.后台修改模板拿WebShell 1.进入Vulhub靶场并执⾏以下命令开启靶场;在浏览器中访问并安装好 #执⾏命令 cd /vulhub/wordpress/pwnscriptum docker-compose up -d 2. 修改其WP的模板,登陆WP后点击 【外 观】 --》 【编辑】 --》 404.php 3.插入一句话木…

Java反序列化CommonsBeanutils无依赖打Shiro

说明 如果您之前未了解过 Commons Collections(CC)利用链,建议您先阅读相关基础文章,然后再回头阅读此文章。这样可以更好地理解其中的内容 Java反序列化-Commons Collections3利用链分析详解 Java反序列化-Commons Collections…

用curl和python通过网络测试Ollama服务器的配置和状态

当一个Ollama服务器创建好后,除了用ollama指令来测试,还可以使用curl和python来通过网络测试Ollama的配置是否正确,远程是否能正常连上并与服务器进行交互。 目录 启动Ollama服务器 下载模型 curl测试 检查服务器状态 列出已安装的模型…

蓝桥杯青少组stema2025年3月9日scratch初级组真题——转动的图形

完整题目可查看: 转动的图形_scratch_少儿编程题库学习中心-嗨信奥https://www.hixinao.com/tiku/scratch/show-5106.html?_shareid3 程序演示可查看: 转动的图形-scratch作品-少儿编程题库学习中心-嗨信奥https://www.hixinao.com/scratch/creation…

杰理科技JL703N双模蓝牙芯片—云信

杰理科技JL703N芯片运算能力、接收灵敏度、发射功率、音频性能等指标均处于行业一流水平,能满足多场景的应用需求,具有以下明显优势: 一、高性能双核浮点CPU,算力十足 JL703N芯片搭载了32位高性能双核CPU,主频高达32…

Asp.net Core API 本地化

本文是一个demo,演示了如何根据用户接口查询字段(正常放header中),设置当前culture,并获取当前culture的key value给用户提示 创建Resources文件夹,添加以下三个文件 其中ExceptionUnuse 是一个空的类,供IStringLocalizer使用&a…

工业相机选型

工业相机选型 一、工业相机分类二、相机的主要参数2.1 分辨率2.2 速度2.3 光学接口 / 接口类型2.4 相机靶面尺寸2.5 像元尺寸2.6 精度 三、镜头介绍及选型方法3.1 工作距离(WD)3.2 视场角(FOV)3.3 (镜头)靶面尺寸3.4 帧率3.5 光圈…

eFish-SBC-RK3576 工业相机(IMX系列)方案设计

一、核心硬件架构 1. ‌图像传感器配置‌ ‌IMX系列选型‌: IMX678(1/1.8" CMOS,2000万像素,全局快门,HDR 120dB)IMX541(2/3" CMOS,1200万像素,12bit ADC&…