Python 数据清洗删除缺失值替换缺失值详情

目录
  • 一、缺失数据剔除
    • 1. python 方式
    • 2. DataFrame 方式
  • 二、缺失值补全
  • 三、重复值剔除(按照行和列)
  • 四、数值转换
    • 1. replace
    • 2. apply
    • 3.applymap

一、缺失数据剔除

1. python 方式

获取所有的缺失值,返回一个 true 和 false 的表

df.isnull()

统计缺失值,按照每一列统计

df.isnull().sum()

统计缺失值 按行

df.isnull().sum(axis='columns')

查看列 是否全部缺失

df.isnull().all()

剔除 植物园 这一列 2种方式

df1 = df.drop(columns='植物园')
df1 = df.drop('植物园', axis=1)

通过数据索引的方式来剔除掉缺测数据。

列:

df1 = df.loc[:, ~(df.isnull().all())]

删除所有 有缺失的行

df1[~(df1.isnull().any('columns'))]

这种方式看起来明显比drop()的方式要复杂一点,那么是不是意味着我们就学drop()就行了,不用再去记住索引方式。

当然不是!drop()看起来简单只是因为刚好只有一列需要剔除,加入我们需要剔除很多数据,那使用drop()就不足以完成任务,还是要配合索引的方式。

下面我们来看一下剔除行里的缺测值,上面的数据有很多行都有缺测值,如果在drop函数中一个一个填是很不现实的,那么我们看一下合理的解决方案应该是什么样的。

2. DataFrame 方式

剔除列的缺失值

df.dropna(axis='columns', how='all', inplace=True)

剔除行的缺失值

df.dropna(axis='index', how='any', inplace=True)

二、缺失值补全

用前一行的数据填充

df.fillna(method='bfill')

用后一行的数据填充

df.fillna(method='bfill')

三、重复值剔除(按照行和列)

返回的是 True 和 False 的 列表

df.duplicated()

剔除重复行

df.drop_duplicates()

返回的是 True 和 False 的 列表

df.duplicated(subset=['天坛'], keep=False)

剔除 天坛 这列里面的所有重复值

df.drop_duplicates(subset=['天坛'], keep=False)

四、数值转换

1. replace

单值转换,将Nan 替换成 -9999

df.replace(np.nan, -9999)

多值转化,将想替换的元素放在一个 [ ] 里就行

df.replace([np.nan, 0], -9999)

2. apply

replace可以进行简单的数据替换,但如果想进行更为复杂的操作replace是无法完成的。
然而对DataFrame而言,apply是非常重要的数据处理方法,它可以接收各种各样的函数(Python内置的或自定义的),处理方式很灵活,完成各种复杂的需求。他的实际作用是将函数作为一个对象,通过apply的调用对DataFrame里的数组元素应用这个函数。

只关注和设置这个规则,循环这种事情交给编程语言去处理

def aqi_level(aqi):
    if aqi>0 and aqi<=50:
        level = '优'
    elif aqi>50 and aqi<=100:
        level = '良'
    elif aqi>100 and aqi<=150:
        level = '轻度污染'
    elif aqi>150 and aqi<=200:
        level = '中度污染'
    elif aqi>200 and aqi<=300:
        level = '重度污染'
    else:
        level = '严重污染'
    return level

# 数据预处理一下  将所有的类型都转为 AQI
aqi = df[df['type']=='AQI']

aqi['东四'].apply(aqi_level)

3.applymap

apply()可以实现对某一行或某一列的函数应用,如果想对DataFrame中的全部数值都使用这个函数来进行转化我们就需要用到applymap()

#~aqi.columns.isin(['date', 'hour', 'type']) 取非这三列的所有列

aqi.loc[:, ~aqi.columns.isin(['date', 'hour', 'type'])].apply(np.mean, axis=0)
aqi.loc[:, ~aqi.columns.isin(['date', 'hour', 'type'])].applymap(aqi_level)

到此这篇关于Python 数据清洗删除缺失值替换缺失值详情的文章就介绍到这了,更多相关Python数据清洗 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python实现数据清洗(缺失值与异常值处理)

    1. 将本地sql文件写入mysql数据库 本文写入的是python数据库的taob表 source [本地文件] 其中总数据为9616行,列分别为title,link,price,comment 2.使用python链接并读取数据 查看数据概括 #-*- coding:utf-8 -*- #author:M10 import numpy as np import pandas as pd import matplotlib.pylab as plt import mysql.connector

  • Python 八个数据清洗实例代码详解

    如果你经历过数据清洗的过程,你就会明白我的意思.而这正是撰写这篇文章的目的——让读者更轻松地进行数据清洗工作. 事实上,我在不久前意识到,在进行数据清洗时,有一些数据具有相似的模式.也正是从那时起,我开始整理并编译了一些数据清洗代码,我认为这些代码也适用于其它的常见场景. 由于这些常见的场景涉及到不同类型的数据集,因此本文更加侧重于展示和解释这些代码可以用于完成哪些工作,以便读者更加方便地使用它们. 数据清洗小工具箱 在下面的代码片段中,数据清洗代码被封装在了一些函数中,代码的目的十分直观.你可

  • Python Pandas删除替换并提取其中的缺失值NaN(dropna,fillna,isnull)

    目录 前言 Pandas中缺少值NaN的介绍 将缺失值作为Pandas中的缺少值NaN 缺少值NaN的删除方法 删除所有值均缺失的行/列 删除至少包含一个缺失值的行/列 根据不缺少值的元素数量删除行/列 删除特定行/列中缺少值的列/行 pandas.Series 替换(填充)缺失值 用通用值统一替换 为每列替换不同的值 用每列的平均值,中位数,众数等替换 替换为上一个或下一个值 指定连续更换的最大数量 pandas.Series 提取缺失值 提取特定行/列中缺少值的列/行 提取至少包含一个缺失值

  • python3常用的数据清洗方法(小结)

    首先载入各种包: import pandas as pd import numpy as np from collections import Counter from sklearn import preprocessing from matplotlib import pyplot as plt %matplotlib inline import seaborn as sns plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文字体设置-黑体 p

  • Python Pandas中缺失值NaN的判断,删除及替换

    目录 前言 1. 检查缺失值NaN 2. Pandas中NaN的类型 3. NaN的删除 dropna() 3.1 删除所有值均缺失的行/列 3.2 删除至少包含一个缺失值的行/列 3.3 根据不缺少值的元素数量删除行/列 3.4 删除特定行/列中缺少值的列/行 4. 缺失值NaN的替换(填充) fillna() 4.1 用通用值统一替换 4.2 为每列替换不同的值 4.3 用每列的平均值,中位数,众数等替换 4.4 替换为上一个或下一个值 总结 前言 当使用pandas读取csv文件时,如果元

  • 利用Python进行数据清洗的操作指南

    目录 缺失值 异常值 数据不一致 无效数据 重复数据 数据泄漏问题 你一定听说过这句著名的数据科学名言: 在数据科学项目中, 80% 的时间是在做数据处理. 如果你没有听过,那么请记住:数据清洗是数据科学工作流程的基础. 机器学习模型会根据你提供的数据执行,混乱的数据会导致性能下降甚至错误的结果,而干净的数据是良好模型性能的先决条件. 当然干净的数据并不意味着一直都有好的性能,模型的正确选择(剩余 20%)也很重要,但是没有干净的数据,即使是再强大的模型也无法达到预期的水平. 在本文中将列出数据

  • 详解Python如何利用Pandas与NumPy进行数据清洗

    目录 准备工作 DataFrame 列的删除 DataFrame 索引更改 DataFrame 数据字段整理 str 方法与 NumPy 结合清理列 apply 函数清理整个数据集 DataFrame 跳过行 DataFrame 重命名列 许多数据科学家认为获取和清理数据的初始步骤占工作的 80%,花费大量时间来清理数据集并将它们归结为可以使用的形式. 因此如果你是刚刚踏入这个领域或计划踏入这个领域,重要的是能够处理杂乱的数据,无论数据是否包含缺失值.不一致的格式.格式错误的记录还是无意义的异常

  • Python 数据清洗删除缺失值替换缺失值详情

    目录 一.缺失数据剔除 1. python 方式 2. DataFrame 方式 二.缺失值补全 三.重复值剔除(按照行和列) 四.数值转换 1. replace 2. apply 3.applymap 一.缺失数据剔除 1. python 方式 获取所有的缺失值,返回一个 true 和 false 的表 df.isnull() 统计缺失值,按照每一列统计 df.isnull().sum() 统计缺失值 按行 df.isnull().sum(axis='columns') 查看列 是否全部缺失

  • python如何去除异常值和缺失值的插值

    1.使用箱型法去除异常值: import numpy as np import pandas as pd import matplotlib as plt import os data = pd.read_excel('try.xls', header=0) # print(data.shape) # print(data.head(10)) # print(data.describe()) neg_list = ['位移'] print("(1)数据的行数为:") R = data.

  • python sklearn与pandas实现缺失值数据预处理流程详解

    注:代码用 jupyter notebook跑的,分割线线上为代码,分割线下为运行结果 1.导入库生成缺失值 通过pandas生成一个6行4列的矩阵,列名分别为'col1','col2','col3','col4',同时增加两个缺失值数据. import numpy as np import pandas as pd from sklearn.impute import SimpleImputer #生成缺失数据 df=pd.DataFrame(np.random.randn(6,4),colu

  • python如何删除列为空的行

    1.摘要 dropna()方法,能够找到DataFrame类型数据的空值(缺失值),将空值所在的行/列删除后,将新的DataFrame作为返回值返回. 2.函数详解 函数形式:dropna(axis=0, how='any', thresh=None, subset=None, inplace=False) 参数: axis:轴.0或'index',表示按行删除:1或'columns',表示按列删除. how:筛选方式.'any',表示该行/列只要有一个以上的空值,就删除该行/列:'all',表

  • 对python数据清洗容易遇到的函数-re.sub bytes string详解

    re.sub 功能,比replace强大的替换函数,将正则表达式匹配上的模块替换成repl re.sub(pattern, repl, string, count=0, flags=0) 返回最左边正则表达式限定的被repl代替的字符串,如果正则表达式没有匹配上,则字符串不做修改. \n is converted to a single newline character, \r is converted to a carriage return, and so forth. Unknown e

  • python数据清洗系列之字符串处理详解

    前言 数据清洗是一项复杂且繁琐(kubi)的工作,同时也是整个数据分析过程中最为重要的环节.有人说一个分析项目80%的时间都是在清洗数据,这听起来有些匪夷所思,但在实际的工作中确实如此.数据清洗的目的有两个,第一是通过清洗让数据可用.第二是让数据变的更适合进行后续的分析工作.换句话说就是有"脏"数据要洗,干净的数据也要洗. 在数据分析中,特别是文本分析中,字符处理需要耗费极大的精力,因而了解字符处理对于数据分析而言,也是一项很重要的能力. 字符串处理方法 首先我们先了解下都有哪些基础方

  • Python清空文件并替换内容的实例

    有个文本文件,需要替换里面的一个词,用python来完成,我是这样写的: def modify_text(): with open('test.txt', "r+") as f: read_data = f.read() f.truncate() #清空文件 f.write(read_data.replace('apple', 'android')) 执行上面这个函数,它会把内容追加进去,而不是替换. f.truncate()没起作用,应该怎么写才可以呢? 需要加上f.seek(0),

  • PyQt5 python 数据库 表格动态增删改详情

    目录 (一).手动连接数据库 (二).编程中使用数据库 (一).手动连接数据库 与下一个的程序连接数据库是独立的2个部分 (1)连接数据库 (2)设置数据源类型 (3)连接及测试 (4)属性中的连接字符串 (二).编程中使用数据库 (5)在Form上加入datagridview,加入两个按钮 (6)代码中加上数据库相关命名空间 using System.Data.SqlClient; (7)第一个按钮“连接数据库”中的代码 效果图: from PyQt5.QtWidgets import * f

随机推荐