精华内容
下载资源
问答
  • Pandas 一些常用的缺失数据处理函数
    千次阅读
    2019-10-29 10:34:49

    1.查看缺失值

    df.isnull().any():  查看哪些字段存在缺失值

    df.isnull().values.sum():  检查缺失值总数

    df.isnull().sum():  查看具体每个字段的缺失值个数

    df.loc[df[col].isnull().values==True,:]:查看col字段存在缺失的数据

    df.columns[df.isnull().any()].tolist():输出缺失字段的列表

    2.删除缺失值

    dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

    axis:方向,默认0,按照x方向,一行一行进行判断;

    how:判断依据,默认为any,任意一个为空;how,指的是全部为空;

    thresh:缺失个数筛选,默认为None,即大于0就要处理;例如输入2,缺失行至少含有2个缺失列,就要进行删除,换句话说,就是某行的缺失个数>=2,就要进行处理;

    subset:生效范围,默认为None,即全部列都要处理;输入一个列表,例如["a","c"],即只按照a,c列的缺失情况进行判断;

    inplace:是否在原来的数据上进行处理,默认为False,即不在原来的数据上进行处理。

    3.找出缺失值的数据,并说明具体哪些字段存在缺失

    说明:

    该函数仅用来查找相应的缺失数据,并对缺失的数据进行标注(具体缺失那些字段)

    df,是指要传入的数据帧;

    exclude_col,要传入一个列表,不需要进行关注的缺失数据列,默认为空列表,即全部列都需要进行考虑;

    remark,生成的标注列的名称;

    def get_miss(df,exclude_col=[],remark="remark"):
        """df must be a DataFrame,exclude_col type must be a list"""
        cols=list(df.columns)
        #remove unnecessary fields
        for i in exclude_col:
            cols.remove(i)
        #get a list of missing fields
        miss_col=[]
        for col in cols:
            if df[col].isnull().sum()>0:
                miss_col.append(col)
        #remark the dataframe
        miss_index=[]
        new_df=df.copy()
        new_df[remark]=""
        for i in miss_col:
            missing_index=list(df[df[i].isnull().values==True].index)
            new_df.loc[missing_index,remark]=new_df[remark]+ ";" + i 
            miss_index+=missing_index    #相当于extend
        miss_index=list(set(miss_index))
        miss_index.sort()
        #remove the begining ";"
        new_df.loc[miss_index,remark]=new_df.loc[miss_index,remark].str[1:]
        return new_df.loc[miss_index,:]

    4.缺失值的填充

    在pandas中,常常会使用fillna来进行填充,具体请看这篇文章,网址:python做数据分析时缺失值填补、缺失值填充方法汇总_theskylife的博客-CSDN博客_python填充缺失值

    5、不进行处理

    贝叶斯网络和人工神经网络,贝叶斯网络是以概率论为理论依据,以概率推理为推理基础,对于缺失值并不敏感。使用贝叶斯网络时,应具有足够的专业知识,清楚各变量之间的关联。人工神经网络可以有效对付缺失值。

    更多相关内容
  • 【5元红包】自定义一个能够自动实现数组去重,缺失值中位数填补函数(python) 请私信我进行验证
  • pandas填充缺失值

    2020-04-20 08:20:18
    -在能够使用大型数据集训练学习算法之前,我们通常需要先清理数据, 也就是说,我们需要通过某个方法检测并更正数据中的错误。 任何给定数据集可能会出现各种糟糕的数据,例如离群值或不正确的,但是我们几乎始终...

    关于NaN值

    -在能够使用大型数据集训练学习算法之前,我们通常需要先清理数据, 也就是说,我们需要通过某个方法检测并更正数据中的错误。

    • 任何给定数据集可能会出现各种糟糕的数据,例如离群值或不正确的值,但是我们几乎始终会遇到的糟糕数据类型是缺少值。
    • Pandas 会为缺少的值分配 NaN 值。

    创建一个具有NaN值得 Data Frame
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    import pandas as pd

    We create a list of Python dictionaries

    创建一个字典列表

    items2 = [{‘bikes’: 20, ‘pants’: 30, ‘watches’: 35, ‘shirts’: 15, ‘shoes’:8, ‘suits’:45},
    {‘watches’: 10, ‘glasses’: 50, ‘bikes’: 15, ‘pants’:5, ‘shirts’: 2, ‘shoes’:5, ‘suits’:7},
    {‘bikes’: 20, ‘pants’: 30, ‘watches’: 35, ‘glasses’: 4, ‘shoes’:10}]

    创建一个DataFrame并设置行索引

    store_items = pd.DataFrame(items2, index = [‘store 1’, ‘store 2’, ‘store 3’])

    显示

    store_items

    显示:

    数据量大时统计NaN的个数
    1
    2
    3
    4
    5

    计算在store_items中NaN值的个数

    x = store_items.isnull().sum().sum()

    输出

    print(‘在我们DataFrame中NaN的数量:’, x)

    输出:

    在我们DataFrame中NaN的数量: 3
    

    .isnull() 方法返回一个大小和 store_items 一样的布尔型 DataFrame,并用 True 表示具有 NaN 值的元素,用 False 表示非 NaN 值的元素。
    1

    store_items.isnull()

    显示:

    在 Pandas 中,逻辑值 True 的数字值是 1,逻辑值 False 的数字值是 0。

    因此,我们可以通过数逻辑值 True 的数量数出 NaN 值的数量。

    为了数逻辑值 True 的总数,我们使用 .sum() 方法两次。

    要使用该方法两次,是因为第一个 sum() 返回一个 Pandas Series,其中存储了列上的逻辑值 True 的总数

    第二个 sum() 将上述 Pandas Series 中的 1 相加

    除了数 NaN 值的数量之外,我们还可以采用相反的方式,我们可以数非 NaN 值的数量。为此,我们可以使用 .count() 方法
    1

    print(‘在我们DataFrame的列中具有非NaN值得数量分别为:\n’, store_items.count())

    输出:

    在我们DataFrame的列中具有非NaN值得数量:
    bikes 3
    glasses 2
    pants 3
    shirts 2
    shoes 3
    suits 2
    watches 3
    dtype: int64
    

    处理这些 NaN 值

    如果 axis = 0,.dropna(axis) 方法将删除包含 NaN 值的任何行
    如果 axis = 1,.dropna(axis) 方法将删除包含 NaN 值的任何列
    

    1
    2

    删除包含NaN值得任何行

    store_items.dropna(axis = 0)

    显示为:

    1

    store_items.dropna(axis = 1)

    显示为:

    注意:

    • .dropna() 方法不在原地地删除具有 NaN 值的行或列。
    • 原始 DataFrame 不会改变。你始终可以在 dropna() 方法中将关键字 inplace 设为 True,在原地删除目标行或列。

    将NaN值替换为合适的值

    我们不再删除 NaN 值,而是将它们替换为合适的值。例如,我们可以选择将所有 NaN 值替换为 0。为此,我们可以使用 .fillna() 方法
    1

    store_items.fillna(0)

    显示:

    我们还可以使用 .fillna() 方法将 NaN 值替换为 DataFrame 中的上个值,称之为前向填充

    .fillna(method = ‘ffill’, axis) 将通过前向填充 (ffill) 方法沿着给定 axis 使用上个已知值替换 NaN 值
    1

    store_items.fillna(method = ‘ffill’, axis = 0)

    显示:

    注意 store 3 中的两个 NaN 值被替换成了它们所在列中的上个值。

    但是注意, store 1 中的 NaN 值没有被替换掉。因为这列前面没有值,因为 NaN 值是该列的第一个值。

    现在,使用上个行值进行前向填充
    1

    store_items.fillna(method = ‘ffill’, axis = 1)

    显示:

    在这种情况下:所有 NaN 值都被替换成了之前的行值

    同时,也可以选择用 DataFrame 中之后的值替换 NaN 值,称之为后向填充
    1
    2

    向后填充列,即为NaN的列值,用其列中的后一个来填充

    store_items.fillna(method = ‘backfill’, axis = 0)

    同理:也可以向后填充行,即为NaN的行值,用其行中的后一个来填充
    1
    2

    向后填充行,即为NaN的行值,用其行中的后一个来填充

    store_items.fillna(method = ‘backfill’, axis = 1)

    注意:.fillna() 方法不在原地地替换(填充)NaN 值。也就是说,原始 DataFrame 不会改变。你始终可以在 fillna() 函数中将关键字 inplace 设为 True,在原地替换 NaN 值。

    还可以选择使用不同的插值方法替换 NaN 值

    .interpolate(method = ‘linear’, axis) 方法将通过 linear 插值使用沿着给定 axis 的值替换 NaN 值, 这个差值也就是前后或者上下的中间值
    1

    store_items.interpolate(method = ‘linear’, axis = 0)

    同时,也可用行值插入
    1

    store_items.interpolate(method = ‘linear’, axis = 1)

    和我们看到的其他方法一样,.interpolate() 方法不在原地地替换 NaN 值,图片就省略了。
    本文来自https://www.jb51.net/article/163872.htm

    展开全文
  • 使用isnull()函数可以判断数据的哪个值是缺失值,并将缺失值标记为True,非缺失值标记为False 使用dropna函数可以删除数据含有缺失值的行。默认情况下,只要某缺失值,该函数就会把这行删除 使用...

    一.处理数据的缺失值

    描述

    • 使用isnull()函数可以判断数据表中的哪个值是缺失值,并将缺失值标记为True,非缺失值标记为False
    • 使用dropna函数可以删除数据表中含有缺失值的行。默认情况下,只要某一行中有缺失值,该函数就会把这一行删除
    • 使用fillna()函数可以将数据表中的所有缺失值填充为指定的值

    语法和参数

    • DataFrame.isnull()
    • DataFrame.dropna(how=None)
      • how:默认为空,当how=all时,删除数据中整行都为空的行
    • DataFrame.fillna(value)
      • value:需要填充的值

    实例

    import pandas as pd
    
    data = pd.read_excel('产品统计表1.xlsx')
    print(data)
    '''
    编号   产品  成本价(元/个)  销售价(元/个)  数量()   成本()  收入()  利润()
    0  a001   背包      16.0        65     60   960.0   3900   2940
    1  a002   钱包      90.0       187     50  4500.0   9350   4850
    2  a003   背包       NaN        65     23   368.0   1495   1127
    3  a004  手提包      36.0       147     26   936.0   3822   2886
    4  a005   钱包      90.0       187     78  7020.0  14586   7566
    5  a006  单肩包      58.0       124     63  3654.0   7812   4158
    6  a007  单肩包      58.0       124     58     NaN   7192   3828
    '''
    # 查看数据的缺失值情况
    print(data.info())
    '''
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 7 entries, 0 to 6
    Data columns (total 8 columns):
     #   Column    Non-Null Count  Dtype  
    ---  ------    --------------  -----  
     0   编号        7 non-null      object 
     1   产品        7 non-null      object 
     2   成本价(元/个)  6 non-null      float64
     3   销售价(元/个)  7 non-null      int64  
     4   数量()     7 non-null      int64  
     5   成本()     6 non-null      float64
     6   收入()     7 non-null      int64  
     7   利润()     7 non-null      int64  
    dtypes: float64(2), int64(4), object(2)
    memory usage: 576.0+ bytes
    None
    '''
    # 判断数据表中的哪个值是缺失值
    a = data.isnull()
    print(a)
    '''
    编号     产品  成本价(元/个)  销售价(元/个)  数量()  成本()  收入()  利润()
    0  False  False     False     False  False  False  False  False
    1  False  False     False     False  False  False  False  False
    2  False  False      True     False  False  False  False  False
    3  False  False     False     False  False  False  False  False
    4  False  False     False     False  False  False  False  False
    5  False  False     False     False  False  False  False  False
    6  False  False     False     False  False   True  False  False
    '''
    # 删除数据表中含有缺失值的行
    b = data.dropna()
    print(b)
    '''
     编号   产品  成本价(元/个)  销售价(元/个)  数量()   成本()  收入()  利润()
    0  a001   背包      16.0        65     60   960.0   3900   2940
    1  a002   钱包      90.0       187     50  4500.0   9350   4850
    3  a004  手提包      36.0       147     26   936.0   3822   2886
    4  a005   钱包      90.0       187     78  7020.0  14586   7566
    5  a006  单肩包      58.0       124     63  3654.0   7812   4158
    '''
    # 删除数据表中整行都是缺失值的行
    c = data.dropna(how='all')
    print(c)
    '''
    编号   产品  成本价(元/个)  销售价(元/个)  数量()   成本()  收入()  利润()
    0  a001   背包      16.0        65     60   960.0   3900   2940
    1  a002   钱包      90.0       187     50  4500.0   9350   4850
    2  a003   背包       NaN        65     23   368.0   1495   1127
    3  a004  手提包      36.0       147     26   936.0   3822   2886
    4  a005   钱包      90.0       187     78  7020.0  14586   7566
    5  a006  单肩包      58.0       124     63  3654.0   7812   4158
    6  a007  单肩包      58.0       124     58     NaN   7192   3828
    '''
    # 将数据表中所有的值都填充为0
    d = data.fillna(0)
    print(d)
    '''
    编号   产品  成本价(元/个)  销售价(元/个)  数量()   成本()  收入()  利润()
    0  a001   背包      16.0        65     60   960.0   3900   2940
    1  a002   钱包      90.0       187     50  4500.0   9350   4850
    2  a003   背包       0.0        65     23   368.0   1495   1127
    3  a004  手提包      36.0       147     26   936.0   3822   2886
    4  a005   钱包      90.0       187     78  7020.0  14586   7566
    5  a006  单肩包      58.0       124     63  3654.0   7812   4158
    6  a007  单肩包      58.0       124     58     0.0   7192   3828
    '''
    # 为不同列中的缺失值设置不同的填充值
    e = data.fillna({'成本价(元/个)': 16, '成本()': 3364})
    print(e)
    '''
     编号   产品  成本价(元/个)  销售价(元/个)  数量()   成本()  收入()  利润()
    0  a001   背包      16.0        65     60   960.0   3900   2940
    1  a002   钱包      90.0       187     50  4500.0   9350   4850
    2  a003   背包      16.0        65     23   368.0   1495   1127
    3  a004  手提包      36.0       147     26   936.0   3822   2886
    4  a005   钱包      90.0       187     78  7020.0  14586   7566
    5  a006  单肩包      58.0       124     63  3654.0   7812   4158
    6  a007  单肩包      58.0       124     58  3364.0   7192   3828
    '''
    

    二.处理数组的重复值

    描述

    • drop_duplicates()函数可以删除重复值
    • unique()函数可以提取唯一值

    用法和参数

    • DataFrame.drop_duplicates(subset=None, keep=“first”)
      • subset:删除某一列的重复值
      • keep:自定义删除重复值时保留哪个重复值所在的行
    • DataFrame.unique()

    实例

    import pandas as pd
    
    data = pd.read_excel('产品统计表2.xlsx')
    print(data)
    '''
    编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
    0  a001   背包        16        65     60    960   3900   2940
    1  a002   钱包        90       187     50   4500   9350   4850
    2  a003   背包        16        65     23    368   1495   1127
    3  a004  手提包        36       147     26    936   3822   2886
    4  a004  手提包        36       147     26    936   3822   2886
    5  a005   钱包        90       187     78   7020  14586   7566
    6  a006  单肩包        58       124     63   3654   7812   4158
    '''
    # 删除重复的行
    a = data.drop_duplicates()
    print(a)
    '''
    编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
    0  a001   背包        16        65     60    960   3900   2940
    1  a002   钱包        90       187     50   4500   9350   4850
    2  a003   背包        16        65     23    368   1495   1127
    3  a004  手提包        36       147     26    936   3822   2886
    5  a005   钱包        90       187     78   7020  14586   7566
    6  a006  单肩包        58       124     63   3654   7812   4158
    '''
    # 删除某一列的重复值
    b = data.drop_duplicates(subset='产品')
    print(b)
    '''
    编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
    0  a001   背包        16        65     60    960   3900   2940
    1  a002   钱包        90       187     50   4500   9350   4850
    3  a004  手提包        36       147     26    936   3822   2886
    6  a006  单肩包        58       124     63   3654   7812   4158
    '''
    # 保留第一个重复值所在的行
    c = data.drop_duplicates(subset='产品', keep='first')
    print(c)
    '''
    编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
    0  a001   背包        16        65     60    960   3900   2940
    1  a002   钱包        90       187     50   4500   9350   4850
    3  a004  手提包        36       147     26    936   3822   2886
    6  a006  单肩包        58       124     63   3654   7812   4158
    '''
    # 保留最后一个重复值所在的行
    d = data.drop_duplicates(subset='产品', keep='last')
    print(d)
    '''
    编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
    2  a003   背包        16        65     23    368   1495   1127
    4  a004  手提包        36       147     26    936   3822   2886
    5  a005   钱包        90       187     78   7020  14586   7566
    6  a006  单肩包        58       124     63   3654   7812   4158
    '''
    # 把重复值一个不留的删除
    e = data.drop_duplicates(subset='产品', keep=False)
    print(e)
    '''
    编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
    6  a006  单肩包        58       124     63   3654   7812   4158
    '''
    f = data['产品'].unique()
    print(f)
    '''
    ['背包' '钱包' '手提包' '单肩包']
    '''
    
    展开全文
  • 目录一、处理重复1、记录重复2、特征重复 一、处理重复 1、记录重复 即一个或者多个特征某几个记录的...方法三:(推荐) pandas提供了一个名为drop_duplicates的去重方法。该方法只对DataFrame或者 Series 类

    一、处理重复值

    1、记录重复

    即一个或者多个特征某几个记录的值完全相同。

    方法:
    方法一: 利用列表(list)去重,自定义去重函数。
    在这里插入图片描述
    方法二:是利用集合(set)的元素是唯一的特性去重,如 dish_set=set(dishes)。 比较上述两种方法可以发现,方法一代码冗长。方法二代码简单了许多,但会导致数据的排列发生改变。

    方法三:(推荐) pandas提供了一个名为drop_duplicates的去重方法。该方法只对DataFrame或者 Series 类型有效。这种方法不会改变数据原始排列,并且兼具代码简洁和运行稳定的特点。
    该方法不仅支持单一特征的数据去重,还能够依据 DataFrame 的其中一个或者几个特征进行去重操作。

    pandas.DataFrame(Series).drop_duplicates(self,subset=None,keep='first',inplace=False)
    

    在这里插入图片描述

    代码实现:

    import pandas as pd
    
    
    # 加载detatil数据
    detail = pd.read_excel('./meal_order_detail.xlsx')
    print(detail)
    
    detail.drop_duplicates(subset="dishes_name", inplace=True)
    print("去重后的结果为:",detail.shape)
    

    打印结果:
    在这里插入图片描述

    2、特征重复

    结合相关的数学和统计学知识,去除连续型特征重复可以利用特征间的相似度将两个相似度为 1 的特征去除一个。在 pandas 中相似度的计算方法为 corr,使用该方法计算相似度时,默认为“pearson”法 ,可以通过“method”参数调节,目前还支持“spearman”法和“kendall”法。

    但是通过相似度矩阵去重存在一个弊端,该方法只能对数值型重复特征去重,类别型特征之间无法通过计算相似系数来衡量相似度。

    代码实现:

    import pandas as pd
    
    
    # 加载detatil数据
    detail = pd.read_excel('./meal_order_detail.xlsx')
    # print(detail)
    # 
    # detail.drop_duplicates(subset="dishes_name", inplace=True)
    # print("去重后的结果为:",detail.shape)
    
    
    # 计算 amounts counts 相关性
    method: {'pearson', 'kendall', 'spearman'}
    # 默认的是皮尔逊相关系数
    print('两列之间相关性计算:\n', detail.loc[:, ['amounts', 'counts']].corr())
    print('两列之间相关性计算:\n', detail.loc[:, ['amounts', 'counts']].corr(method='kendall'))
    print('两列之间相关性计算:\n', detail.loc[:, ['amounts', 'counts']].corr(method='spearman'))
    
    # 负相关 ---相关性较弱了
    
    

    打印结果:
    在这里插入图片描述

    二、处理缺失值

    1、检测缺失值

    利用 isnull 或 notnull 找到缺失值
    数据中的某个或某些特征的值是不完整的,这些值称为缺失值。
    pandas 提供了识别缺失值的方法 isnull 以及识别非缺失值的方法 notnull,这两种方法在使用时返回的都是布尔值 True 和 False。

    结合 sum 函数和 isnull、notnull 函数,可以检测数据中缺失值的分布以及数据中一共含有多少缺失值。

    2、处理缺失值

    (1)删除法

    删除法分为删除观测记录和删除特征两种,它属于利用减少样本量来换取信息完整度的一种方法,是一种最简单的缺失值处理方法。

    Pandas 中提供了简便的删除缺失值的方法 dropna,该方法既可以删除观测记录,亦可以删除特征。

    pandas.DataFrame.dropna(self, axis=0, how='any', thresh=None, subset=None,inplace=False)
    

    在这里插入图片描述

    (2)替换法

    替换法是指用一个特定的值替换缺失值。特征可分为数值型和类别型,两者出现缺失值时的处理方法也是不同的。

    缺失值所在特征为数值型时,通常利用其均值、中位数和众数等描述其集中趋势的统计量来代替缺失值。

    缺失值所在特征为类别型时,则选择使用众数来替换缺失值。

    Pandas 库中提供了缺失值替换的方法名为 fillna,其基本语法如下。

    pandas.DataFrame.fillna(value=None, method=None, axis=None, inplace=False,limit=None)
    

    在这里插入图片描述

    (3)插值法

    删除法简单易行,但是会引起数据结构变动,样本减少;替换法使用难度较低,但是会
    影响数据的标准差,导致信息量变动。在面对数据缺失问题时,除了这两种方法之外,还有
    一种常用的方法—插值法。
    常用的插值法有线性插值、多项式插值和样条插值等:
    线性插值是一种较为简单的插值方法,它针对已知的值求出线性方程,通过求解线性方
    程得到缺失值。
    多项式插值是利用已知的值拟合一个多项式,使得现有的数据满足这个多项式,再利用
    这个多项式求解缺失值,常见的多项式插值法有拉格朗日插值——推荐和牛顿插值等。
    样条插值是以可变样条来作出一条经过一系列点的光滑曲线的插值方法,插值样条由一
    些多项式组成,每一个多项式都是由相邻两个数据点决定,这样可以保证两个相邻多项式及
    其导数在连接处连续。
    从拟合结果可以看出多项式插值和样条插值在两种情况下拟合都非常出色,线性插值法
    只在自变量和因变量为线性关系的情况下拟合才较为出色。
    而在实际分析过程中,自变量与因变量的关系是线性的情况非常少见,所以在大多数情
    况下,多项式插值和样条插值是较为合适的选择。

    (4)特殊字符缺失值

    在数据中有时还存在着特殊字符的缺失值,如: “*”, “?”,":","-"等特殊字符。

    针对这样的缺失值,首先先要利用 replace 函数替换为能处理的缺失值,如: np.nan 类型, 再进行删除、填充、插值等处理。

    代码实现

    # 缺失值---空缺的值
    import pandas as pd
    import numpy as np
    
    # 想要处理缺失值 ---判定数据中是否存在缺失值???
    # 加载数据
    # data = pd.read_excel('./qs.xlsx')
    # print('data:\n', data)
    # print('data:\n', data.shape)
    # print('*' * 100)
    
    # 检测缺失值
    # isnull --判定,如果是缺失值,---True  如果不是,---False --和sum连用 --统计各列的缺失值个数
    # notnull --判定,如果有值,True,如果缺失,--False,和sum连用 --count类似--统计非空数据的数目
    # print('缺失值检测:\n', pd.isnull(data).sum()) ---推荐
    # print('缺失值检测:\n', pd.notnull(data).sum())
    
    # 缺失值处理方式:
    # (1)删除法
    # 删除--drop  ---删除指定的行列
    # 删除法 ---删除缺失值 ---dropna
    # 可以使用dropna来进行删除缺失值
    # axis 指定删除的方向,axis=0 --->删除行,axis=1 删除列
    # inplace  是否对原df产生影响,如果为True,即对原df直接删除缺失值,
    # 如果为False,即返回一个删除之后的结果,并不会对原df产生影响
    # how --->any ---只要存在缺失值,就进行删除
    #     --->all ---只有全部都为缺失的情况下,才进行删除
    # data.dropna(axis=0, how='any', inplace=True)
    # data.dropna(axis=1, how='any', inplace=True)
    # data.dropna(axis=0, how='all', inplace=True)
    # print('删除缺失值之后的结果:\n', data)
    # 注意:删除法不能随意使用,可能会造成数据的大量丢失,只有在整行、整列全部为空或者大部分为空的情况下,才进行删除
    
    
    # # (2)填充法
    # # 利用指标数据进行填充
    # # 可以使用众数、均值、中位数、或者上下邻居来进行填充
    # # 可以对类别型数据 使用众数、上下邻居来填充
    # # 如:价格--连续的float小数---连续型数据---众数、均值、中位数、上下邻居来填充
    #
    # # # 使用众数来填充 商品ID 这一列数据
    # # # 如果想使用其他指标进行填充---先计算出对应的指标,然后进行fillna
    # # # a、计算众数
    # mode = data.loc[:, '商品ID'].mode()[0]
    # print('mode:\n', mode)
    # # # b、进行填充
    # data.loc[:, '商品ID'].fillna(value=mode, inplace=True)
    #
    # # 使用上邻居来填充 类别ID
    # # ffil pad表示上一个非缺失的值
    # # backfill bfill表示下一个非缺失的值
    # data.loc[:, '类别ID'].fillna(method='pad', inplace=True)
    #
    # # 使用上下邻居来填充 门店编号
    # data.loc[:, '门店编号'].fillna(method='bfill', inplace=True)
    #
    # print('填充之后的结果:\n', data)
    # # 注意:填充法可能会导致数据的分布规律发生变化,从而影响结果
    
    
    # (3)插值法
    # 拟合一定的关系来进行数据的填充
    # 常用的差值法
    # 线性插值---拟合线性关系
    # 多项式插值(拉格朗日插值) ---拟合拉格朗日多项式关系
    # 样条插值--拟合样条曲线关系
    
    # 导入插值模块
    from scipy.interpolate import interp1d  # 线性插值模块
    from scipy.interpolate import lagrange  # 拉格朗日插值模块
    # from scipy.interpolate import spline  # 样条插值模块(新版本--移除了,使用interp1d进行样条插值)
    
    # 创建插值数据
    # 用现有的数据---去拟合未知的数据
    # 长度一样的
    x = np.array([1, 2, 3, 4, 5, 8, 9])
    y = np.array([3, 5, 7, 9, 11, 17, 19])
    z = np.array([2, 8, 18, 32, 50, 128, 162])
    
    # 使用x来分别按照线性插值、拉格朗日插值、样条插值 来 拟合出 y z中缺失的值
    # 线性插值
    # x-->用来拟合的数据
    # y --->需要被拟合的数据
    # 用x 来拟合y
    #  kind='linear' ---线性的拟合
    linear_1 = interp1d(x=x, y=y, kind='linear')
    linear_2 = interp1d(x=x, y=z, kind='linear')
    
    print('使用线性拟合来拟合数据:\n', linear_1([6, 7]))  # [ 13.  15.]
    print('使用线性拟合来拟合数据:\n', linear_2([6, 7]))  # [  76.  102.]
    
    # (3)插值法
    # 拟合一定的关系来进行数据的填充
    # 常用的差值法
    # 线性插值---拟合线性关系
    # 多项式插值(拉格朗日插值) ---拟合拉格朗日多项式关系
    # 样条插值--拟合样条曲线关系
    
    # 导入插值模块
    from scipy.interpolate import interp1d  # 线性插值模块
    from scipy.interpolate import lagrange  # 拉格朗日插值模块
    # from scipy.interpolate import spline  # 样条插值模块(新版本--移除了,使用interp1d进行样条插值)
    
    # 创建插值数据
    # 用现有的数据---去拟合未知的数据
    
    # 长度一样的
    x = np.array([1, 2, 3, 4, 5, 8, 9])
    y = np.array([3, 5, 7, 9, 11, 17, 19])  # y = 2 * x + 1
    z = np.array([2, 8, 18, 32, 50, 128, 162])  # z = 2 * x ^ 2
    
    # 使用x来分别按照线性插值、拉格朗日插值、样条插值 来 拟合出 y z中缺失的值
    
    
    # 线性插值
    # 使用 interp1d 进行曲线插值(样条插值)
    # l1 = interp1d(x=x, y=y, kind='cubic')
    # l2 = interp1d(x=x, y=z, kind='cubic')
    # print('使用interp1d来进行曲线插值:\n', l1([6, 7]))  # [ 13.  15.]
    # print('使用interp1d来进行曲线插值:\n', l2([6, 7]))  # [ 72.  98.]
    
    
    
    # 拉格朗日插值
    # 使用x 借助拉格朗日多项式 来拟合 y z
    # 拉格朗日插值模块
    # x --->用来拟合的数据
    # w --->需要被拟合的数据
    # la1 = lagrange(x=x, w=y)
    # la2 = lagrange(x=x, w=z)
    #
    # print('使用拉格朗日拟合数据:\n', la1([6, 7]))  # [ 13.  15.]
    # print('使用拉格朗日拟合数据:\n', la2([6, 7]))  # [ 72.  98.]
    
    
    
    # 样条插值
    # xk--->用来拟合的数据
    # yk ---> 需要被拟合的数据
    # print(spline(xk=x, yk=y, xnew=[6, 7]))  # [ 13.  15.]
    # print(spline(xk=x, yk=z, xnew=[6, 7]))  # [ 72.  98.]
    
    
    # 在使用 插值法,
    # 如果真实数据的关系 是线性的, 那么使用线性插值、拉格朗日插值、样条插值---结果都是可以接受的
    # 如果真实数据的关系 是非线性的,那么使用线性插值的结果与真实结果存在差异,
    # 而样条插值、拉格朗日插值效果明显会比线性插值较好一些
    
    # 如果遇到插值 ---推荐使用拉格朗日插值、样条插值
    
    # 特殊字符的缺失值--无法检测 如:* ? : ' ' !  ...
    
    
    # 特殊值处理
    # 加载数据
    data = pd.read_excel('./qs.xlsx')
    print('data:\n', data)
    
    # 按照门店编号分组,看 商品ID 出现次数
    # res = data.groupby(by='门店编号')['商品ID'].count()
    # print('res:\n',res)
    
    # 如果发现特殊字符之后?
    # 先将特殊字符替换为 可以处理的 NaN 类型
    # 参数1 : 特殊字符
    # 参数2 : np.nan
    # inplace
    data.replace('*', np.nan, inplace=True)
    print('data:\n', data)
    print('*' * 100)
    
    # 检测
    res_null = pd.isnull(data).sum()
    print('检测结果:\n', res_null)
    print('*' * 100)
    
    
    
    
    展开全文
  • Pandas知识点-缺失值处理

    千次阅读 2021-05-06 22:22:16
    Pandas知识点-缺失值处理
  • 数据处理之缺失值填充

    千次阅读 2020-12-23 02:58:30
    概述首先对数据缺失的原因、类型以及处理方法做一个简单地总结,如下图所示:2. 直接删除法当缺失值的个数只占整体很小一部分的时候,可直接删除缺失值(行)。但是如果缺失值占比比较大,这种直接删除缺失值的处理...
  • 导读:在进行数据分析和建模的过程,大量的时间花在数据准备上:加载、清理、转换和重新排列。本文将讨论用于缺失值处理的工具。缺失数据会在很多数据分析应用出现。pandas的目标之就是尽可...
  • pandas填补缺失值的方法

    千次阅读 2020-02-17 09:12:50
    pandas填补缺失值的方法 在处理数据的过程,经常会遇到原数据部分内容的缺失,为了保证我们最终数据统计结果的正确性,通常我们有两种处理方式,第种就是删除掉这些部分缺失的数据;第二种就是填补这些缺失的...
  • 因此,数据预处理非常重要的项就是处理缺失值。 我们采用从泰坦尼克号提取出来的数据,这个数据有三特征,如下: Age 数值型 Sex 字符型 Embarked 字符型 import pandas as pd #index_col=0是因为原数据...
  • pandas中提供了非常丰富的工具来对缺失值进行处理。这里主要是对常用方法的简要介绍。注:不同地区和软件对缺失值的表示方法不同,在用pandas读取文件时可指定缺失值的形式给参数na_values,如:missing_values = ['n...
  • pandas数据清洗:案例详解 fillna函数 填补空缺

    千次阅读 多人点赞 2021-08-23 14:19:44
    pandas数据清洗:fillna函数填补空缺1 fillna函数简介2 填补空缺3种方法2.1 构建学习数据2.2 填补特定2.3 用前一个非空缺填充2.4 用后一个非空缺填充2.5 拓展2.5.1 均值填充2.5.1 中位数填充2.5.1 最大...
  • pandas-缺失值处置

    千次阅读 2021-01-13 18:56:28
    # 缺失值是指数据集中的某些观察存在遗漏的指标值...替换法:用某种直接替换缺失值,例如,对连续变量而言,可以使用均值或中位数替换,对于离散型变量,可以使用众数替换。## 3.插补法:是指凭据其他非确实的变量或...
  • pandas缺失值的处理

    2020-12-04 19:42:26
    在大多数的数据分析应用,经常会遇到缺失值,常见的缺失值处理方式有过滤和填充。在 Python pandas 使用浮点值 NaN 表示浮点数和非浮点数组缺失值,同时 Python 内置 None 值也会被当作缺失值。在处理缺失...
  • Python Pandas 处理缺失值

    千次阅读 2021-01-13 18:56:27
    当我们拿到份原始数据,首先会查看数据的基础信息,例如每列数量统计,内存消耗、...因此,数据预处理非常重要的项工作就是处理缺失值。本文例子使用的是泰坦尼克号数据集,首先预览一下数据集的整体情况:...
  • Pandas缺失值处理

    2020-12-04 19:42:29
    原标题:Pandas缺失值处理本文作者:杨长青本文编辑:周聪聪技术总编:张学人好消息!!!爬虫俱乐部将于2019年5月2日至4日在武汉举行Stata编程技术五一训练营,此次采用理论与案例相结合的方式,旨在帮助大家熟悉...
  • 整理完了。附带数据、代码、结果。
  • Python数据分析之pandas学习(三)

    千次阅读 2021-01-28 11:13:57
    有关pandas模块的学习与应用主要介绍以下8部分:1、数据结构简介:DataFrame和Series2、数据索引index3、利用pandas查询数据4、利用pandas的DataFrames进行统计分析5、利用pandas实现SQL操作6、利用pandas进行缺失...
  • Python数据分析基础: 数据缺失值处理

    千次阅读 多人点赞 2020-10-31 21:56:01
    作者:东哥起飞 公众号:Python数据科学 圣人曾说过:数据和特征决定了机器学习的上限,而模型和算法只是逼近这上限而已。 再好的模型,如果没有好...本篇我们来说说面对数据缺失值,我们该如何处理。文末有.
  • Pandas提供了一些用于将表格型数据读取DataFrame对象的函数。 其中最常用的为read_csv和read_table。read_csv 从文件、URL、文件 型对象加载带分隔符的数据。默认分隔符为逗号。read_table从文件、 URL、文件型...
  • 查看DataFrame数据及属性import pandas as pddf_obj = pd.DataFrame() #创建DataFrame对象df_obj.dtypes #查看各行的数据格式df_obj['列名'].astype(int)#转换某列的数据类型df_obj.head() #查看前几行的数据,默认前...
  • 详解Python数据分析--Pandas知识点

    千次阅读 2021-03-04 07:41:21
    重复的处理利用drop_duplicates()函数删除数据重复多余的记录, 比如删除重复多余的ID.import pandas as pddf = pd.DataFrame({"ID": ["A1000","A1001","A1002", "A1002"],"departmentId": [60001,600...
  • 导入完整的数据集并探索以波士顿数据集为例import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom sklearn.datasets import load_bostonfrom sklearn.impute import SimpleImputer #用来填补...
  • python缺失值填充的几种方法

    万次阅读 多人点赞 2019-06-14 10:37:41
    常见的数据缺失填充方式分为很多种,比如删除法、均值法、回归法、KNN、MICE、EM等等。R语言包在此方面比较全面,python稍差。 python目前已有的两种常见的包,第一个是impyute,第二个是fancyimpute。比如...
  • python处理数据中缺失值

    千次阅读 2019-12-01 15:57:39
    (1)直接删除法(当缺失值个数只占整体很小部分时) 在采用删除法处理缺失值时,需要首先检测样本总体确实值得的个数。python统计缺失值的方法为: import numpy as np import pandas as pd #读取数据,将...
  • 缺失值的分类 按照数据缺失机制可分为: 可忽略的缺失 完全随机缺失,所缺失的数据发生的概率既与已观察到的数据无关,也与未观察到的数据无关 随机缺失,假设缺失数据发生的概率与所观察到的变量是有关的,而与未...
  • 缺失值可能是数据科学最不受欢迎的值,然而,它们总是在身边。忽略缺失值也是不合理的,因此我们需要找到有效且适当地处理它们的方法。 在本文,我们将介绍 8 种不同的方法来解决缺失值问题,哪种方法最适合特定...
  • 以下文章来源于Coggle数据科学,作者钱魏Way写在前面在进行数据竞赛数据预处理阶段经常需要对数据进行缺失值处理。关于缺失值的处理并没有想象的那么简单。以下为一些经验分享,基本涵...
  • 再好的模型,如果没有好的数据和特征质量,那训练出来的效果也不会有所提高。数据质量对于数据分析而言是至关重要的,有时候...本篇我们来说说面对数据缺失值,我们该如何处理。1 数据缺失的原因首先我们应该知道...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,104
精华内容 441
关键字:

运用pandas,自定义一个能够自动实现数据去重,缺失值中位数填补的函数

友情链接: tanchishe.rar