精华内容
下载资源
问答
  • pandas空值填充

    千次阅读 2019-11-12 17:03:04
    pandas空值填充,缺失值处理

    pandas空值填充

    背景

    数据缺失是数据不完整的表现,常表现为空值,也是数据分析人员经常碰到的问题,数据的缺失可能是数据采集不到,或在数据录入的不小心遗漏,或者根本不存在这个数据,还可能是数据导出的过程发生错误,数据的缺失会使得信息不完整,处理缺失数据一般会有下面两种办法

    1. 直接删除掉
      当缺失值占比非常小,直接省略掉缺失的这部分数据,但是在原数据量小的情况下,原本数据能够提供的信息就不多,再删除这些缺失值会导致信息更一步减少,非常不可取,这时候就需要通过填充手段来进行缺失值填充。
    2. 空值填充
      空值填充是指利用某些技术手段把空缺的值给填充上,来弥补信息的完全丢失,常见的填充方法有固定值填充法,均值填充法,中位数填充法,众数填充法,向前向后填充法,高端一点的有K近邻填充法,预测模型填充法,每种方法有其适用场景,这次主要讲一讲最常用的向前向后填充法。
    3. 不予理会
      有些算法对空值友好,有较好的容错能力,及时空值参与模型也不会对模型影响很,这个时候可以考虑不理睬缺失值。

    在这里插入图片描述

    现在手边有一份数据表如下,其中黄色部分是缺失的,根据业务知道其中0也是不合理的,现在需要把其中的0值去掉,并且将空值填充,看到漕泾镇板块这一列数据缺失比较大,对于这种缺失严重的,建立一套标准直接删除掉,大致步骤如下

    1. 用空值替换掉表中0值
    2. 统计每一列的空值
    3. 设定一个门槛,将缺失严重的列直接删除掉
    4. 利用向前向后填充法填充表中空值

    去掉0值且向后填充

    我们发现向前填充之后,首行还是没发填充,原因很简单,因为,向前填充是利用前面一个数来填充后面的空位,如果前面没有数的话,也就无法填充,同样的道理,向后填充也无法填充最后一行的空值。针对这种情况需要先后采用向后填充和向后填充,两者配合使用,下面是接着再使用向后填充的效果。向后填充

    完整代码

    # -*- coding: utf-8 -*-
    """
    project_name:数据填充
    @author: 帅帅de三叔
    Created on Tue Nov 12 13:33:44 2019
    """
    import numpy as np #导入数据分析模块
    import pandas as pd #导入数据分析模块
    data=pd.read_excel("待填充数据.xlsx",sheet_name="房间数",index_col="月份") #读取数据
    print(data.describe())
    data[data==0]=np.nan #先将0值转化为空值\
    df=data.dropna(axis=1,thresh=11, subset=None, inplace=False) #过滤空值过多的列
    print(df.describe()) 
    df1=df.fillna(value=None,method='ffill',axis=0,limit=None) #列向前填充
    df2=df.fillna(value=None,method='bfill',axis=0,limit=None) #列向后填充,避免首行空值
    df2.to_excel("清洗填充结果.xlsx")
    

    代码解读

    读取数据后可以 data.describe() 函数来查看数据框的一些统计情况,特别注意count值,可以对比count值和len的大小,两者之差就是缺失值的个数,紧接着将0值转化为空值,然后在利用 thresh 的值来设定非空缺值个数为多少时候不过滤,再通过 describe() 函数来看前后两次的数据维度,可以发现数据维度在收缩,然后接连使用向前填充和向后填充,最后将填充的结果保存到excel。

    在这里插入图片描述

    展开全文
  • Excel 空值填充

    千次阅读 2020-04-28 14:51:08
    第一步,选择空值 ...空值填充为上一行单元格内容 以上为基本步骤,除了这个之外。我们还可以将单元格填充为上一行的数据,在选中空值单元格之后,在空值中输入“=“,然后按向上箭头,选中”上...

    第一步,选择空值

    原始数据如下:
    在这里插入图片描述

    选择需要替换空白的数据列:
    在这里插入图片描述

    使用CTRL+G调出定位界面,选择定位条件中的空值。
    在这里插入图片描述
    在这里插入图片描述

    第二步 空值条件填充

    直接填充为某值

    这里选择填充数字1111
    在这里插入图片描述
    在这里插入图片描述

    第三步 按住CTRL+ENTER 全部输入

    在这里插入图片描述

    空值填充为上一行单元格内容

    以上为基本步骤,除了这个之外。我们还可以将单元格填充为上一行的数据,在选中空值单元格之后,在空值中输入“=“,然后按向上箭头,选中”上一行单元格”,在使用ctrl+enter全部填充。
    在这里插入图片描述

    所有空值填充为某单元格内容

    这时候需要按F4锁定
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 这个时候就需要对空值进行填充了,我们直接使用运算符进行运算是没办法传递参数进行填充的,这个时候我们需要使用DataFrame当中为我们提供的算术方法。 DataFrame当中常用的运算符有这么几种: add、sub、div这些...

    今天是pandas数据处理专题的第四篇文章,我们一起来聊聊DataFrame的基本运算。

    上一篇文章当中我们介绍了DataFrame数据结构当中一些常用的索引的使用方法,比如iloc、loc以及逻辑索引等等。今天的文章我们来看看DataFrame的一些基本运算。

    数据对齐

    我们可以计算两个DataFrame的加和,pandas会自动将这两个DataFrame进行数据对齐,如果对不上的数据会被置为Nan(not a number)。

    首先我们来创建两个DataFrame:

    import numpy as np

    import pandas as pd

    df1 = pd.DataFrame(np.arange(9).reshape((3, 3)), columns=list('abc'), index=['1', '2', '3'])

    df2 = pd.DataFrame(np.arange(12).reshape((4, 3)), columns=list('abd'), index=['2', '3', '4', '5'])

    得到的结果和我们设想的一致,其实只是通过numpy数组创建DataFrame,然后指定index和columns而已,这应该算是很基础的用法了。

    然后我们将两个DataFrame相加,会得到:

    我们发现pandas将两个DataFrame加起来合并了之后,凡是没有在两个DataFrame都出现的位置就会被置为Nan。这其实是很有道理的,实际上不只是加法,我们可以计算两个DataFrame的加减乘除的四则运算都是可以的。如果是计算两个DataFrame相除的话,那么除了对应不上的数据会被置为Nan之外,除零这个行为也会导致异常值的发生(可能不一定是Nan,而是inf)。

    fill_value

    如果我们要对两个DataFrame进行运算,那么我们当然不会希望出现空值。这个时候就需要对空值进行填充了,我们直接使用运算符进行运算是没办法传递参数进行填充的,这个时候我们需要使用DataFrame当中为我们提供的算术方法。

    DataFrame当中常用的运算符有这么几种:

    add、sub、div这些我们都很好理解,那么这里的radd、rsub方法又是什么意思呢,为什么前面要加上一个r呢?

    看起来费解,但是说白了一文不值,radd是用来翻转参数的。举个例子,比如说我们希望得到DataFrame当中所有元素的倒数,我们可以写成1 / df。由于1本身并不是一个DataFrame,所以我们不能用1来呼叫DataFrame当中的方法,也就不能传递参数,为了解决这种情况,我们可以把1 / df写成df.rdiv(1),这样我们就可以在其中传递参数了。

    由于在算除法的过程当中发生了除零,所以我们得到了一个inf,它表示无穷大。

    我们可以在add、div这些方法当中传入一个fill_value的参数,这个参数可以在计算之前对于一边出现缺失值的情况进行填充。也就是说对于对于只在一个DataFrame中缺失的位置会被替换成我们指定的值,如果在两个DataFrame都缺失,那么依然还会是Nan。

    我们对比下结果就能发现了,相加之后的(1, d), (4, c)以及(5, c)的位置都是Nan,因为df1和df2两个DataFrame当中这些位置都是空值,所以没有被填充。

    fill_value这个参数在很多api当中都有出现,比如reindex等,用法都是一样的,我们在查阅api文档的时候可以注意一下。

    那么对于这种填充了之后还出现的空值我们应该怎么办呢?难道只能手动找到这些位置进行填充吗?当然是不现实的,pandas当中还为我们提供了专门解决空值的api。

    空值api

    在填充空值之前,我们首先要做的是发现空值。针对这个问题,我们有isna这个api,它会返回一个bool型的DataFrame,DataFrame当中的每一个位置表示了原DataFrame对应的位置是否是空值。

    dropna

    当然只是发现是否是空值肯定是不够的,我们有时候会希望不要空值的出现,这个时候我们可以选择drop掉空值。针对这种情况,我们可以使用DataFrame当中的dropna方法。

    我们发现使用了dropna之后,出现了空值的行都被抛弃了。只保留了没有空值的行,有时候我们希望抛弃是的列而不是行,这个时候我们可以通过传入axis参数进行控制。

    这样我们得到的就是不含空值的列,除了可以控制行列之外,我们还可以控制执行drop的严格程度。我们可以通过how这个参数来判断,how支持两种值传入,一种是'all',一种是'any'。all表示只有在某一行或者是某一列全为空值的时候才会抛弃,any与之对应就是只要出现了空值就会抛弃。默认不填的话认为是any,一般情况下我们也用不到这个参数,大概有个印象就可以了。

    fillna

    pandas除了可以drop含有空值的数据之外,当然也可以用来填充空值,事实上这也是最常用的方法。

    我们可以很简单地传入一个具体的值用来填充:

    fillna会返回一个新的DataFrame,其中所有的Nan值会被替换成我们指定的值。如果我们不希望它返回一个新的DataFrame,而是直接在原数据进行修改的话,我们可以使用inplace参数,表明这是一个inplace的操作,那么pandas将会在原DataFrame上进行修改。

    df3.fillna(3, inplace=True)

    除了填充具体的值以外,我们也可以和一些计算结合起来算出来应该填充的值。比如说我们可以计算出某一列的均值、最大值、最小值等各种计算来填充。fillna这个函数不仅可以使用在DataFrame上,也可以使用在Series上,所以我们可以针对DataFrame中的某一列或者是某些列进行填充:

    除了可以计算出均值、最大最小值等各种值来进行填充之外,还可以指定使用缺失值的前一行或者是后一行的值来填充。实现这个功能需要用到method这个参数,它有两个接收值,ffill表示用前一行的值来进行填充,bfill表示使用后一行的值填充。

    我们可以看到,当我们使用ffill填充的时候,对于第一行的数据来说由于它没有前一行了,所以它的Nan会被保留。同样当我们使用bfill的时候,最后一行也无法填充。

    总结

    今天的文章当中我们主要介绍了DataFrame的一些基本运算,比如最基础的四则运算。在进行四则运算的时候由于DataFrame之间可能存在行列索引不能对齐的情况,这样计算得到的结果会出现空值,所以我们需要对空值进行处理。我们可以在进行计算的时候通过传入fill_value进行填充,也可以在计算之后对结果进行fillna填充。

    在实际的运用当中,我们一般很少会直接对两个DataFrame进行加减运算,但是DataFrame中出现空值是家常便饭的事情。因此对于空值的填充和处理非常重要,可以说是学习中的重点,大家千万注意。

    展开全文
  • pyspark 空值填充

    万次阅读 2019-06-04 12:27:05
    在利用pyspark进行数据空值填充的过程中,遇到了一个坑,坑得明明白白。就是简单的空值处理,花费了好几天的时间。其实还是API的理解不到位的原因。特此整理一下,共勉共享。 1. 问题描述 具体描述一下待处理的问题...

    在进行数据分析的时候,空值的处理是数据预处理过程中的重要环节。在利用pyspark进行数据空值填充的过程中,遇到了一个坑,坑得明明白白。就是简单的空值处理,花费了好几天的时间。其实还是API的理解不到位的原因。特此整理一下,共勉共享。

    1. 问题描述

    具体描述一下待处理的问题,以便记录整理。
    假设有一个数据如下表:

    idname
    1sun
    2wang
    3John
    4

    注意,最后一个name为空。
    需要解决这么几个问题:

    1. name字段进行空值填充;
    2. 添加一列并赋值为‘abc’

    2. df.fillna() df.na.fill()

    这两个函数其实是相同的,但是格外需要注意的是,要求替换内容与被替换的内容的数据格式必须一样,否则将被ignore!!!!!!!其实就是这个细节没有考虑到,才导致出错。

    3. 第一个问题解决

    from pyspark.sql.functions import lit
    df = spark.createDataFrame([(1, "sun"),(2, "wang"), (3, "John"),(4,None)],["id", "name"])
    df = df.na.fill('Unkown') #因为只有这一列为字符串
    

    第二个问题解决

    因为别的方面的需要,第二个问题分为了两步:

    ## 1. 添加一个空列
    df = df.withColumn('newcol',lit(None)
    ## 一顿操作
    
    ## 2. 对该列中的空值进行填充
    df.na.fill(subset='newcol',value='dsaf').show()
    
    ## 3. 甚至采用dict的形式,会报错!
    df.na.fill({'newcol':'adfaf'}).show()
    

    结果:
    空值填充结果
    并没有替换成功!!!

    报错信息:

    Py4JJavaError: An error occurred while calling o821.fill.
    : org.apache.spark.sql.AnalysisException: cannot resolve 'CAST('adfaf' AS NULL)' due to data type mismatch: cannot cast string to null;;
    'Project [id#0L, name#1, coalesce(newcol#1027, cast(adfaf as null)) AS newcol#1065, nan#118, null#925]
    

    结合报错信息,终于想到,是因为添加的这一列的数据类型可能不对。查看一下,果然:

    df.dtypes
    

    结果:

    [('id', 'bigint'),
     ('name', 'string'),
     ('newcol', 'null'),
     ('nan', 'double'),
     ('null', 'string')]
    

    原来是以为添加的这一列的数据格式为null,这就造成了格式不对应,被忽略了!!
    所以解决方法就是在添加的时候,指定数据格式:

    ## 1. 添加一个空列
    df = df.withColumn('newcol',lit(None).astype('int'))
    

    这样,就没问题了!!!

    展开全文
  • 这个时候就需要对空值进行填充了,我们直接使用运算符进行运算是没办法传递参数进行填充的,这个时候我们需要使用DataFrame当中为我们提供的算术方法。 DataFrame当中常用的运算符有这么几种: add、sub、p这些我们...
  • 将DataFrame某列中的空值填充为0

    万次阅读 2019-09-29 14:22:15
    客户需求 将空值填充为0
  • 广告关闭腾讯云11.11云上盛惠 ,精选热门产品助力上云,... 了解以上概念,就不难理解none 与null的区别1)是不同的数据类型in: type(none)out:nonetype表示该值是一个空对象,空值是python里一个特殊的值,用none表...
  • sql填充空值 以下是所有与数据相关的技术中的一个非常普遍的问题,我们将针对这两个非常精简的基于SQL的解决方案进行研究: 如何用“先前的非空值填充稀疏数据集的单元格? 问题 这个问题真的很简单, 在这个...
  • Pandas学习——空值填充

    千次阅读 2020-09-14 11:00:15
    处理默认值 pandas默认采用NaN作为默认值,np.nan和None也被视为默认值。 python之间None可以比较,结果为True,而np.nan比较结果是false ...用于填充空值的值 method {‘backfill’, ‘bfill’, ‘pa
  • 选中你需要填充的区域,打开定位,选中空值,在任意的一个空格写上数据,按Ctrl shift,填充完成。 3.如何只复制未隐藏的表格:打开excel,选中需要复制的单元格,然后打开菜单的定位功能(Ctrl G),选中可见单元格...
  • dataframe将某列的空值填充为12

    千次阅读 2020-05-27 18:59:27
    工作中遇到某列数据中空值需要替换为12 df['支付周期'].fillna(12, inplace=True)
  • Scala的空值删除和空值填充

    千次阅读 2020-02-13 17:51:31
    重点:删除空值值所在行不考虑选择列的数据类型,而填充时一定要看好对应填充列的数据类型。 删除 import spark.implicits._ var datafff = Seq( ("0", "ming", "tj","2019-09-06 17:15:15", "2002", "192.196", ...
  • 这个时候就需要对空值进行填充了,我们直接使用运算符进行运算是没办法传递参数进行填充的,这个时候我们需要使用DataFrame当中为我们提供的算术方法。 DataFrame当中常用的运算符有这么几种: add、sub、p这些我们...
  • np.isnan(X).any() X=X.fillna(0) 一定要将填充结果再次赋值
  • pandas时间序列空值填充

    千次阅读 2020-05-17 16:18:40
    counter = 2 #novels_month的第一个非空值的位置 for i in range(len(empty)): f_val = str(pd.Period(empty.iloc[i,0],'M')) if f_val in c_list: val = novels_month[0].iloc[c_list.index(f_val),1] empty.iloc...
  • 本人有modis时间序列影像,一年46景,利用质量控制数据,去除云和雪之后有许多空值,如何利用前后3天的中值填充每个像素,求Python代码。或者好用的工具。
  • 2.选中取消单元格合并的内容,输入CTRL + G,点击定位条件,选择“空值”。 3.在图中下方输入“=F7”,之后输入CTRL + ENTER(即回车键),即可实现效果。其中"F7"的值为取消合并单元格后的第一单元格所在的位置。...
  • 数据预处理包含:数据盘点-数据可视化分析-空值填充-数据编码 import matplotlib.pyplot as plt import seaborn as sns from sklearn.neighbors import KNeighborsClassifier from sklearn.linear_model import ...
  • 利用数据框df的name列中的非空值,去填充df的features_1列中对应的NaN。 很容易写出df[df['features_1'].isnull()]['features_1'']=df[df['features_1'].isnull()][‘name’] ,但是会给出以下警告: A value is ...
  • excel空值填充

    2021-08-30 15:16:18
    选中填充区域,按F5,选择定位条件,选择空值,输入填充的值,按下ctrl+回车
  • dfc = pd.DataFrame({'A': ['aaa', np.nan, 'ccc'], 'B': [1, 2, 3], 'C': [np.nan, np.nan, np.nan], 'D': ['mm', np.nan, 10.0]}) A B C D 0 aaa 1 NaN mm 1 NaN 2 NaN NaN 2 ccc 3 NaN...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,759
精华内容 12,703
关键字:

空值填充

友情链接: BevolWidget.zip