缺失数据处理,常见数据清洗之空值替换【Python习题】(保姆级图文+实现代码)

23 篇文章 189 订阅

目录


主要内容是校设课程的习题和课外学习的一些习题。

欢迎关注 『Python习题』 系列,持续更新中
欢迎关注 『Python习题』 系列,持续更新中

题目

描述‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

附件文件中存在一些缺失数据,请找出这些缺失值并用输入的字符串 s 来替换。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

输入格式‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

输入一个字符串s‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

输出格式‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

处理结果以二维列表形式输出,元素为原文件的每一行切分成的列表‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

数据集

filldata.csv

,,20.76249006,0.000168044,,,18.9104994,0.08860522
,,20.77301274,0.000149807,,,18.92102208,0.086064377
,,20.78353541,0.00013318,,,18.93154475,0.083365648
,,20.79405809,0.000118071,,,18.94206743,0.080528602
,,20.80458076,0.000104387,,,18.9525901,0.077573307
,,20.81510343,9.20E-05,,,18.96311277,0.07452009
,,22.33036852,0,,,18.97363545,0.071389313
,,,,,,18.98415812,0.068201145
,,,,,,18.9946808,0.064975352
,,,,,,19.00520347,0.061731102
,,,,,,19.01572615,0.058486784
,,,,,,19.02624882,0.055259852
,,,,,,19.03677149,0.052066246

示例 1‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

输入:

a	

输出:

[['a', 'a', '20.76249006', '0.000168044', 'a', 'a', '18.9104994', '0.08860522'], ...... ['a', 'a', 'a', 'a', 'a', 'a', '19.03677149', '0.052066246']]

(此处仅给出第一行和最后一行数据,供参考格式)
下面是我通过测试点的完整输出

[['a', 'a', '20.76249006', '0.000168044', 'a', 'a', '18.9104994', '0.08860522'], ['a', 'a', '20.77301274', '0.000149807', 'a', 'a', '18.92102208', '0.086064377'], ['a', 'a', '20.78353541', '0.00013318', 'a', 'a', '18.93154475', '0.083365648'], ['a', 'a', '20.79405809', '0.000118071', 'a', 'a', '18.94206743', '0.080528602'], ['a', 'a', '20.80458076', '0.000104387', 'a', 'a', '18.9525901', '0.077573307'], ['a', 'a', '20.81510343', '9.20E-05', 'a', 'a', '18.96311277', '0.07452009'], ['a', 'a', '22.33036852', '0', 'a', 'a', '18.97363545', '0.071389313'], ['a', 'a', 'a', 'a', 'a', 'a', '18.98415812', '0.068201145'], ['a', 'a', 'a', 'a', 'a', 'a', '18.9946808', '0.064975352'], ['a', 'a', 'a', 'a', 'a', 'a', '19.00520347', '0.061731102'], ['a', 'a', 'a', 'a', 'a', 'a', '19.01572615', '0.058486784'], ['a', 'a', 'a', 'a', 'a', 'a', '19.02624882', '0.055259852'], ['a', 'a', 'a', 'a', 'a', 'a', '19.03677149', '0.052066246']]

思路

先说,这oj属实是有问题,因为一旦使用了np和pd就会报错运行错误(也就是说题目限制不能用这两个库,但是题目里面还没有说,确实是恶心人,给大家排雷了,别想用上面两个库了。忍不住吐槽,这模块写出来不给人用,那写模块的意义是什么?)

朴实无华的实现空值替换(只有这种可以过测试点,下面两种答案对的,但是过不了判题系统)

使用循环遍历的方式实现

for i in range(len(lines)):
    lines[i]=lines[i].split(",")

    for j in range(len(lines[i])):
        if lines[i][j]=="":
            lines[i][j]=s

np实现实现空值替换

np.where把空值一次性都找出来并进行替换

data[np.where(data=='')] = s 

pandas实现空值替换

替换得到的df数据,一步到位,简简单单

data=pandas.read_csv("filldata.csv").fillna(value=s).values

代码

朴实无华的实现空值替换

(只有这种可以过测试点,下面两种答案对的,但是过不了判题系统)
s=input()
with open('filldata.csv', 'r', encoding='utf-8') as f:
    lines=f.read().split("\n")
for i in range(len(lines)):
    lines[i]=lines[i].split(",")

    for j in range(len(lines[i])):
        if lines[i][j]=="":
            lines[i][j]=s
print(lines)

np实现实现空值替换

import numpy as np
s=input()
with open("filldata.csv",encoding = 'utf-8') as f:
    data = np.loadtxt(f,str,delimiter = ",")#str类型,不写str的话默认是float
    data[np.where(data=='')] = s
mylist=[]
for i in data:
    mylist.append(list(i))
print(mylist)

pandas实现空值替换

import pandas
s=input()
data=pandas.read_csv("filldata.csv").fillna(value=s).values
mylist=[]
for i in data:
    mylist.append(list(i))
print(mylist)


实现效果

在这里插入图片描述


总结

大家喜欢的话,给个👍,点个关注!给大家分享更多有趣好玩的Python习题!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2022 mzh

Crated:2022-3-1

欢迎关注 『Python习题』 系列,持续更新中
欢迎关注 『Python习题』 系列,持续更新中

【更多内容敬请期待】


  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发现你走远了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值