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

    千次阅读 2019-11-12 17:03:04
    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。

    在这里插入图片描述

    展开全文
  • 处理默认值 pandas默认采用NaN作为默认值,np.nan和None也被视为默认值。 python之间None可以比较,结果为True,而np.nan比较结果是false ...用于填充空值的值 method {‘backfill’, ‘bfill’, ‘pa

    处理默认值

    pandas默认采用NaN作为默认值,np.nan和None也被视为默认值。

    python之间None可以比较,结果为True,而np.nan比较结果是false

    >>> None == None
    True
    
    >>> np.nan == np.nan
    False
    

    可以通过fillna()函数来填充默认值,如df.fillna(1)

    参数 备注
    value 用于填充的空值的值
    method {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None。
    定义了填充空值的方法, pad / ffill表示用前面行/列的值,填充当前行/列的空值,
    backfill / bfill表示用后面行/列的值,填充当前行/列的空值。
    axis 轴。0或’index’,表示按行删除;1或’columns’,表示按列删除。
    inplace 是否原地替换。布尔值,默认为False。如果为True,则在原DataFrame上进行操作,返回值为None。
    limlit int, default None。如果method被指定,对于连续的空值,这段连续区域,最多填充前 limit 个空值(如果存在多段连续区域,每段最多填充前 limit 个空值)。如果method未被指定, 在该axis下,最多填充前 limit 个空值(不论空值连续区间是否间断)
    downcast dict, default is None,字典中的项为,为类型向下转换规则。或者为字符串“infer”,此时会在合适的等价类型之间进行向下转换,比如float64 to int64 if possible

    可以通过interpolate()在默认位置进行线性插值。

    Parameters

    • methodstr, default ‘linear’

      Interpolation technique to use. One of:‘linear’: Ignore the index and treat the values as equally spaced. This is the only method supported on MultiIndexes.‘time’: Works on daily and higher resolution data to interpolate given length of interval.‘index’, ‘values’: use the actual numerical values of the index.‘pad’: Fill in NaNs using existing values.‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘spline’, ‘barycentric’, ‘polynomial’: Passed to scipy.interpolate.interp1d. These methods use the numerical values of the index. Both ‘polynomial’ and ‘spline’ require that you also specify an order (int), e.g. .df.interpolate(method='polynomial', order=5)‘krogh’, ‘piecewise_polynomial’, ‘spline’, ‘pchip’, ‘akima’, ‘cubicspline’: Wrappers around the SciPy interpolation methods of similar names. See Notes.‘from_derivatives’: Refers to scipy.interpolate.BPoly.from_derivatives which replaces ‘piecewise_polynomial’ interpolation method in scipy 0.18.

    • axis{{0 or ‘index’, 1 or ‘columns’, None}}, default None

      Axis to interpolate along.

    • limitint, optional

      Maximum number of consecutive NaNs to fill. Must be greater than 0.

    • inplacebool, default False

      Update the data in place if possible.

    • limit_direction{{‘forward’, ‘backward’, ‘both’}}, Optional

      Consecutive NaNs will be filled in this direction.If limit is specified:If ‘method’ is ‘pad’ or ‘ffill’, ‘limit_direction’ must be ‘forward’.If ‘method’ is ‘backfill’ or ‘bfill’, ‘limit_direction’ must be ‘backwards’.If ‘limit’ is not specified:If ‘method’ is ‘backfill’ or ‘bfill’, the default is ‘backward’else the default is ‘forward’Changed in version 1.1.0: raises ValueError if limit_direction is ‘forward’ or ‘both’ and method is ‘backfill’ or ‘bfill’. raises ValueError if limit_direction is ‘backward’ or ‘both’ and method is ‘pad’ or ‘ffill’.

    • limit_area{{None, ‘inside’, ‘outside’}}, default None

      If limit is specified, consecutive NaNs will be filled with this restriction.None: No fill restriction.‘inside’: Only fill NaNs surrounded by valid values (interpolate).‘outside’: Only fill NaNs outside valid values (extrapolate).New in version 0.23.0.

    • downcastoptional, ‘infer’ or None, defaults to None

      Downcast dtypes if possible.

    可参照下文博客

    https://blog.csdn.net/weixin_43213268/article/details/89052353

    展开全文
  • 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...

     1.读入csv文件

    novels_month = pd.read_csv(csv_path)

    2.生成时间索引 

    #2004-12-1是时间序列开始的时间,并以月为间隔
    rng = pd.date_range('2004-12-1', periods = int((pd.Period(novels_month.iloc[-1,0],'M') - pd.Period('2004-12-1','M')).freqstr[0:-1]), freq = 'M') + pd.Timedelta('1 day')
    
    s = pd.Series(rng)

    3.生成一个空的DataFrame

    empty = pd.DataFrame([],columns=["update_date","rating_total"])
    empty["update_date"] = s
    empty

    4.填充DataFrame

    #这里是使用的临近值进行填充
    c_list = list(novels_month[0]["update_date"]);
    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[i,1] =  val
            counter = c_list.index(f_val)
        else:
            #将值填充为最邻近的一个值
            empty.iloc[i,1] =  novels_month[0].iloc[counter,1]

    5.重新保存csv文件

    empty.to_csv(os.path.join(NOVEL_PATH,"test.csv"), index_label="index_label")

    6.补充

    使用fillna进行值的填充

    # 通过fillna填充缺失值 
    # https://www.jianshu.com/p/79086fa52803
    
    median = housing["total_bedrooms"].median() sample_incomplete_rows["total_bedrooms"].fillna(median, inplace=True) # option 3 sample_incomplete_rows

     

    展开全文
  • pandas删除填充空值以及缺失值

    千次阅读 2019-12-07 21:54:13
    3、利用_.fillna填充函数,以下操作同博客内容,注意其中截取的代码为部分代码,要想实现整个效果,定要将所创建的数表和函数结合(不然会报错) 4、函数DataFrame.isna()用来判断是不是缺失值,以true/false的...

    1、https://blog.csdn.net/lwgkzl/article/details/80948548此篇博客有讲解

    注意:

    1、删除

    规则:

    any:只要某行或者某列有缺失值就删除

    all:全部缺失才删除

    thresh: 一行或一列中至少出现了thresh个才删除(限定出现具体的缺失值再删除)

    subset:在某些列的子集中选择出现了缺失值的列删除,不在子集中的含有缺失值的列或行不会删除(由axis决定是行还是列);限定某行或者某列进行操作

    inplace:刷选过缺失值得新数据是存为副本还是直接在原数据上进行修改。

    2、填充数值

    规则:

    value指定填充怎样的数值;fillna表示用同样的值填充,比如fillna(5)表示用5替换缺失值

    value则指明用特定的值填充特定的行或者列;

    axis:注明如何填充(行/列);

    method:ffill(axis=1表示横向的前面的值替换后面的缺失值,如果axis=0,那么则是上面的值替换下面的缺失值。)

    与ffill相对的backfill/bfill表示缺失值后面的一个值代替前面的缺失值;

    limit:限定填充缺失值的个数

    注:method中的参数ffill和value不可同时使用

    操作:

    1、先创建3行3列的数据表

    2、利用_.dropna()函数,()内若不注明,则为默认值,默认删除行和只要含有缺失值的;故此函数作用:只要含有缺失值的行均会被删除

    print df.dropna(how='all',axis=1);若要对列进行操作需要在括号内特别注明(axis=1),how='all'表示列或者行全部缺失时才删除

    3、利用_.fillna填充函数,以下操作同博客内容,注意其中截取的代码为部分代码,要想实现整个效果,定要将所创建的数表和函数结合(不然会报错)

    4、函数DataFrame.isna()用来判断是不是缺失值,以true/false的形式

    用来确定,即查找

    5、最上面链接博客的最后一小部分写出了用heelo替换空格值

    展开全文
  • 点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤嫦娥应悔偷灵药, 碧海青天夜夜心。今天是pandas数据处理专题的第四篇...
  • 检查df是不是有空值 检查每个元素是不是空的 df.isnull() 表里面有一个元素如果是空的,这个返回值都会是True。...如何填充空值 首先找个有缺失值的df df prop value 0 11.85 NaN 1 11.85 11.85 2 28.34 28.34 3 6.46
  • 利用数据框df的name列中的非空值,去填充df的features_1列中对应的NaN。 很容易写出df[df['features_1'].isnull()]['features_1'']=df[df['features_1'].isnull()][‘name’] ,但是会给出以下警告: A value is ...
  • pandas空值的操作

    2020-07-28 15:36:49
    print(temp.fillna('无')) #填充没有的 空值空值写为“无” print(temp.dropna()) #删除有空值的行 print(temp.dropna(how='all')) #如果一行全是缺失值 才删掉这一行 temp=temp.dropna(axis=1) #
  • 利用各行/各列的均值去填充空值 参考: 1:python—创建字典的方式 2:pandas.DataFrame.fillna¶ 利用各行/各列的均值去填充空值   以列为例,简单来说,填充时指定各列填充的值为各列的均值就好了。对行的操作,...
  • 针对空值的处理,首先要来了解一下空值[python基础教程](https://www.xin3721.com/eschool/pythonxin3721/)的类型: 一、pandas中的None 和 NaN 有什么区别?...二、Pandas空值操c#教程作 isnull() 判断..
  • Python-pandas的fillna()方法-填充空值

    万次阅读 多人点赞 2019-05-06 22:24:39
    pandas中fillna()方法,能够使用指定的方法填充NA/NaN值。 1.函数详解 函数形式:fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs) 参数: value:用于填充...
  • '''fillna() 填充所有的空值''' print(df.fillna(value="填充值")) """ age salary work 张三 20 10000 填充值 李四 21 11000 python 小赵 19 9900 python 小王 22 8500 python 小冯 23 15000 填充值 """ '''可以...
  • pandas中fillna()方法,能够使用指定的方法填充NA/NaN值。 https://blog.csdn.net/qq_17753903/article/details/89892631
  • 本文整理了数据中空值的处理操作,主要内容如下: ...填充空值fillna()函数 为了便于描述,定义本文示例数据为如下结构: df = pd.DataFrame([[1, np.nan], [np.nan, 4], [5,6],[np.nan,7]],columns=["A",...
  • import pandas as pd fpath = './ant-learn-pandas-master/datas/student_excel/student_excel.xlsx' #skiprows忽略两个空行 rating = pd.read_excel(fpath,skiprows=2) print(rating) 检测: #检测所有格是否...
  • 要求:将number_1中的空值用number_2中的非空值进行填充。方法如下: > df [ "number_1" ] . fillna ( df [ "number_2" ] , inplace = True ) > print ( df ) name number_1 number_2 0 apple 1.0 NaN ...
  • pandas中fillna()方法,能够使用指定的方法填充NA/NaN值。 1.函数详解 函数形式:fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs) 参数: value:用于填充空值...

空空如也

空空如也

1 2 3 4 5 6
收藏数 111
精华内容 44
关键字:

pandas空值填充