pandas 预处理

文章目录

  • 第1关:数据读取与合并
  • 第2关:数据清洗
  • 第3关:数据转换


第1关:数据读取与合并

任务描述
本关任务:加载 csv 数据集,实现 DataFrame 合并。

知识讲解
Pandas 模块导入
import pandas as pd

读取 csv 文件
In [1]: pd.read_csv(path) #返回DataFrame
index_col 是 read_csv 方法的常用参数,常用作读取文件的指定列为行索引。例如有数据文件 test.csv ,其内容为:

name,a,b,c
x,1,2,3
y,4,5,6
把第 0 列作为行索引的代码如下:

In [1]: df = pd.read_csv('test.csv',index_col = 0)#df的行索引就是test.csv的第0列。
In [2]: df.index
Out[2]: Index(['x', 'y'], dtype='object', name='name')
In [3]: df.values
Out[3]:
array([[1, 2, 3],[4, 5, 6]], dtype=int64)
In [4]: df.columns
Out[4]: Index(['a', 'b', 'c'], dtype='object')

DataFrame合并
DataFrame 合并有三种方法:concat 、 append 和 merge 。

详情参见教材和官方文档。

注意:若出现如下错误,直接添加参数 sort=True 即可。

To accept the future behavior, pass ‘sort=True’.
……
编程要求
根据提示,在右侧编辑器补充代码,完成本关任务。

测试说明
平台会对你的代码进行测试,若与预期输出一致,则算通关。
示例代码如下:

# -*- coding: utf-8 -*-'''
第1关 数据读取与合并
现有源自世界银行的四个数据集:
1)economy-60-78.csv,
2)economy-79-19.csv,
3)population-60-78.csv,
4)population-79-19.csv,
其中分别存放了不同时间段(1960-1978和1979-2019)的
中国经济相关数据和中国人口及教育相关数据。
'''
#请将上述数据集内容读取至DataFrame结构中,
#年份为列索引,Indicator Name为行索引,
#观察其结构和内容,把它们合并为一个DataFrame,命名为ChinaData。
#输出ChinaData的形状
############begin############
import pandas as pd
d1 = pd.read_csv('economy-60-78.csv',index_col = 0)
d2 = pd.read_csv('economy-79-19.csv',index_col = 0)
d3 = pd.read_csv('population-60-78.csv',index_col = 0)
d4 = pd.read_csv('population-79-19.csv',index_col = 0)# print(d1.shape)  #(2, 19)
# print(d2.shape)  #(2, 41)
# print(d3.shape)  #(116, 19)
# print(d4.shape)  #(116, 41)d12 = pd.concat([d1,d2],axis = 1,sort=True)
d34 = pd.concat([d3,d4],axis = 1,sort=True)  #axis = 0为纵向拼接,axis = 1为横向拼接。
ChinaData = pd.concat([d34,d12],sort=True)print(ChinaData.shape)  #(119, 60)
#############end#############

在这里插入图片描述

第2关:数据清洗

任务描述
本关任务:数据清洗
包括:空白行删除、数据完整性检验、数据填充、插值等内容。

相关知识
为了完成本关任务,你需要掌握:

删除缺失值;
检测缺失值;
填充缺失值;
拉格朗日插值;
线性插值。
删除缺失值
DataFrame.dropna 方法用于删除含有缺失值的行或列,关键参数:axis 和how。

axis
表示轴向,0 为行,1 为列,默认 0。

how
表示删除形式,how = ‘any’ 表示只要有缺失值就删除;how=‘all’ 表示全为缺失值才删除。

检测缺失值
DataFrame.isnull() 识别缺失值,返回包含True和False的 DataFrame。
DataFrame.notnull() 方法识别非缺失值,返回包含True和False的 DataFrame。
上述两方法结合 sum 函数可用于检测数据序列中缺失值的分布情况。

填充缺失值
DataFrame.fillna 方法能用指定值替换缺失值。关键参数:value、method和axis。

value
表示指定的填充值。

method
method = 'bfill’后向填充,用后面的非缺失值填充;
method = 'ffill’前向填充,用前面的非缺失值填充。

axis
表示操作轴向,默认1(列)。

拉格朗日插值

from scipy.interpolate import lagrange
formula = lagrange(x,y)#formula是通过lagrange方法生成的公式,x和y为数据序列
ins_y = formula(ins_x)#ins_x为缺失值所在位置,ins_y为插值结果。

线性插值

from scipy.interpolate import interp1d#1是数字一
formula = interp1d(x,y,kind = 'linear')#formula是通过linear方法生成的公式,x和y为数据序列
ins_y = formula(ins_x)#ins_x为缺失值所在位置,ins_y为插值结果。

编程要求
根据提示,在右侧编辑器补充代码,完成本关任务。

测试说明
平台会对你的代码进行测试,若与预期输出一致,则算通关。

开始你的任务吧,祝你成功!

示例代码如下:

# -*- coding: utf-8 -*-
'''
第2关 数据清洗
'''
import pandas as pd
d1 = pd.read_csv('economy-60-78.csv',index_col = 0)
d2 = pd.read_csv('economy-79-19.csv',index_col = 0)
d3 = pd.read_csv('population-60-78.csv',index_col = 0)
d4 = pd.read_csv('population-79-19.csv',index_col = 0)
d12 = pd.concat([d1,d2],axis = 1,sort=True)
d34 = pd.concat([d3,d4],axis = 1,sort=True)
ChinaData = pd.concat([d34,d12],sort=True)
'''
请针对ChinaData完成如下操作。
'''
# 2.1 删除空白行
# 提示:dropna,inplace
############begin############
print('原表形状',ChinaData.shape)
linenum = ChinaData.shape[0]
ChinaData.dropna(how='all',inplace=True)
print('新表形状',ChinaData.shape)
linenum -=ChinaData.shape[0]
print("%d个空白行被删除。"%linenum)
#############end############## 2.2 查找数据最完整(空值最少)的年份并输出
# 提示:notnull(),根据值找索引(上课讲过的方法)
############begin############
#print(ChinaData.notnull().sum().sort_values(ascending=False)[0])
nullsummary = ChinaData.isnull().sum()
y = nullsummary.loc[nullsummary==nullsummary.min()].index[0]
print(y)#############end############## 2.3 前向填充"男性吸烟率(吸烟男性占所有成年人比例)",输出2000年至2019年的数据
# fillna,ffill
############begin############cigarette = ChinaData.loc['男性吸烟率(吸烟男性占所有成年人比例)',:]
print(cigarette.fillna(method = 'ffill').loc['2000':'2019'])#############end############## 2.4 用2015年到2018年4年的gdp数据对2019年GDP数值进行拉格朗日插值预测,输出预测结果
# lagrange,
# 注意:x的取值从0开始,即x = np.array([0,1,2,3]),代表2015至2018 4年,2019年的x取值为4。
############begin############from scipy.interpolate import lagrange
gdp = ChinaData.loc['GDP',:]
lagf = lagrange(range(0,4),gdp.values[-5:-1])
print(lagf(4))
#############end############## 2.5 用线性插值法填充“入学率,高等院校,男生(占总人数的百分比)”1995年到2002年数据,并输出插值后的94年至03年的数据
# interp1d
############begin############from scipy.interpolate import interp1d
student = ChinaData.loc['入学率,高等院校,男生(占总人数的百分比)',:]
linevalue = interp1d([0,9],[student.loc['1994'],student.loc['2003']],kind = 'linear')
student.loc['1995':'2002'] = linevalue(range(1,9))
print(student.loc['1994':'2003'])#############end#############

在这里插入图片描述

第3关:数据转换

任务描述
本关任务:数据转换。包括数据标准化和数据离散化。

知识讲解
为了完成本关任务,你需要掌握:1、离差标准化,2、等宽离散化。

离差标准化
离差标准化就是对原始数据进行线性变换并映射至 [0,1] 区间的方法。该方法需要自行编写实现函数,建议参考教材或网络资源自行实现。

等宽离散化
等宽离散化将数据的值域分成宽度相同区间,根据数据所在区间取值,实现连续变量的离散化。pandas.cut函数可以实现这种操作,关键参数:x和bins。

x
待离散化的数据。

bins
离散化类别数。

注意:
获得离散化结果后,常用value_counts()方法对离散化结果进行频数统计,以观察离散化数据的分布情况。

编程要求
根据提示,在右侧编辑器补充代码,完成本关任务。

测试说明
平台会对你的代码进行测试,若与预期输出一致,则算通关。

开始你的任务吧,祝你成功!

示例代码如下:

# -*- coding: utf-8 -*-'''
第3关 数据转换
'''
import pandas as pd
d1 = pd.read_csv('economy-60-78.csv',index_col = 0)
d2 = pd.read_csv('economy-79-19.csv',index_col = 0)
d3 = pd.read_csv('population-60-78.csv',index_col = 0)
d4 = pd.read_csv('population-79-19.csv',index_col = 0)
d12 = pd.concat([d1,d2],axis = 1,sort=True)
d34 = pd.concat([d3,d4],axis = 1,sort=True)
ChinaData = pd.concat([d34,d12],sort=True)
'''
请针对ChinaData实现下列操作
'''
# 3.1 对“人口,总数”数据(1960-2018)进行离差标准化,并输出。
# 提示:自定义离差标准化函数,注意统计年份区间
############begin############def MinMaxScale(data):data = (data-data.min())/(data.max()-data.min())return data
population = ChinaData.loc['人口,总数',:][:-1]
npopu = MinMaxScale(population)
print(npopu)#############end############## 3.2 对“GDP 增长率(年百分比)”(1961-2018)数据进行等宽离散化为7类,输出分布情况
# 提示:cut,注意统计年份区间
############begin############gdpRatio = ChinaData.loc['GDP 增长率(年百分比)',:][1:-1]
result = pd.cut(gdpRatio,7)
print(result.value_counts())#############end#############

在这里插入图片描述


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

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

相关文章

毕业论文答辩PPT该怎么做?推荐3个ai工具帮你做答辩ppt

在我原本的认知里面,答辩PPT是要包含论文各个章节的,在答辩时需要方方面面都讲到的,什么摘要、文献综述、实证分析、研究结果样样不落。但是,这大错特错! 答辩PPT环节时长一般不超过5分钟,老师想要的答辩P…

【练习4】

1.两数之和 暴力&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {int n nums.size();vector<int> res(2, -1); // 初始化结果为-1for (int i 0; i < n; i) {int temp nums[i];for (int j i 1; j <…

设计模式——行为型模式——策略模式(含实际业务使用示例、可拷贝直接运行)

目录 策略模式 定义 组成和UML图 代码示例 实际业务场景下策略模式的使用 策略模式优缺点 使用场景 JDK中使用策略模式示例 参考文档 策略模式 定义 策略模式定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使它们可以相互替换&#xff0c;且算法的变化…

【好困】磁场里的瞌睡虫:地磁暴真的会让我们感到疲倦吗?

【好困】磁场里的瞌睡虫&#xff1a;地磁暴真的会让我们感到疲倦吗&#xff1f; 写在最前面地磁暴真的会让我们感到疲倦吗&#xff1f;一探究竟地磁暴是什么&#xff1f;地磁暴如何影响人体&#xff1f;结论 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每…

企业大文件传输之安全数据传输的重要性

企业数据安全性的维护直接关系到企业的市场竞争力乃至其生存的根基。数据的保护不仅涉及到保护企业的商业秘密&#xff0c;也关乎到客户隐私的保护&#xff0c;更触及到国家安全的敏感层面。因此&#xff0c;保障数据在传输过程中的安全&#xff0c;成为了每个企业和组织必须面…

Mysql8.0修改配置文件my.ini的坑

出现的问题&#xff1a;一般直接双击打开my.ini文件默认会用系统自带的记事本打开&#xff0c;如果打开后修改了其中的内容并通过记事本直接保存的话&#xff0c;下次重启就会导致mysql无法启动。 原因是mysql会以ANSI编码读取my.ini文件。 解决办法&#xff1a;使用notepad打…

[js] 递归,数组对象根据某个值进行升序或者降序

一、效果图 1.1 父级 1.2 父级与子级 二、代码 升序降序&#xff0c;只要把 a.num - b.num 改成 b.num - a.num <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, i…

【蚂蚁笔试题汇总】2024-05-11-蚂蚁春招笔试题-三语言题解(CPP/Python/Java)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新蚂蚁近期的春秋招笔试题汇总&#xff5e; &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f49…

基于Python的飞机大战游戏

学习目标 了解 飞机大战游戏的规则 理解 面向对象思想,会独立设计游戏的类与模块 掌握 pygame模块的使用 1.1 游戏介绍 飞机大战是一款由腾讯公司微信团队推出的软件内置的小游戏,这款游戏画面简洁有趣,规则简单易懂,操作简便易上手,在移动应用兴起之初曾风靡一时。 1.1.…

修改表空间对应数据文件的大小

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 表空间与数据文件紧密相连&#xff0c;相互依存&#xff0c;创建表空间的时候需设置数据文件大小。 在后期实际应用中&#xff0c;如果实际存储的数据量超出事先设置的数据…

小红书·电商运营课:小红书开店流程,小红书电商如何运营(18节视频课)

课程目录 第1节课:学习流程以及后续实操流程注意事项 第2节课:小红书店铺类型解析以及开店细节 第3节课:小红书电商运营两种玩法之多品店铺解析 第4节课:小红书电商运营两种玩法之单品店铺解析 第5节课:选品课(多品类类目推荐) 第6节课:选品课(多品类类目推荐) 第7节课:…

为啥我说英语能决定程序员的天花板?

看到知乎有这样的一个问题&#xff0c;作为程序员的你&#xff0c;大学最后悔没有好好学哪门课&#xff1f; 很多人回答《软件工程》、《线性代数》、《微积分》等&#xff0c;各种都有。。 但我觉得&#xff0c;这些课都很重要&#xff0c;但没学好不妨碍自学。 其实对程序…