获取列数据重复的比例

我们在数据清洗过程中,需要去除一些无关的变量。来减低数据的维度。

处理csv数据,本次遇见列数据非常的多,手动寻找数据重复比例非常麻烦,所以我写了个方法。自动来计算数据列中大范围重复的数据,输出该数据,并显示,该数据占总数的比例。

#定义一个函数,对数据的列进行测试,吧列数据中一些占比出现异常的选项
def count_data(train):
    list1=[]
    list2=[]
    list3=[]
    dir = {}
    for col in train.columns:#对每一列数据进行循环
        # print(col)
        dir = train[col].drop_duplicates()#单独列数据进行去重,大于10个的直接跳过
        if dir.size>10:
            pass
        else:#对去重后数据进行保存,储存则数据在整一列数据中对数据进行匹配
            # print(dir)
            for i in dir:
                # print(i)
                num = 0
                for j in train[col]:
                    if j  == i:
                        num+=1
                rate = num/len(train[col])#计算出现次数在总数中的占比
                if(rate>0.97):#小于0.9则数据对整体数据有影响,大于0.9则数据有可能为无关数据
                    print("列{}的数据占比有异常,超过百分之97数据为重复,重复率为{}".format(col,rate))
                    print("列{},{}   出现的次数为{}".format(col,i,num))
                    list1.append(col)
                    list2.append(num)
                    list3.append(rate)
                    # dir[col] = [num,rate]
    dir = pd.DataFrame([list1,list2,list3],index = ["列名","出现次数","比例"])
    return dir.T

count_data(train)

train 为数据集数据。输出结果。。

对于这部分数据,我们可以更具实际需求就行删除或者修改,考虑到这部分数据的数据量过大,一般考虑直接删除该列数据。

##根据分析的结果,把列数据对总元素的占比非常大的数据进行删除
all_data.drop(["Street"],axis = 1, inplace = True)
all_data.drop(["Utilities"],axis = 1, inplace = True)
all_data.drop(["Condition2"],axis = 1, inplace = True)
all_data.drop(["RoofMatl"],axis = 1, inplace = True)
all_data.drop(["Heating"],axis = 1, inplace = True)

在下一节中,将介绍数据缺失值的填补,对数值型数据进行填补中位数,对类别型数据进行填补众数。

有更好的方法,希望各位大神留言指教。小白学习中。。。需要各种意见完善代码,非常感谢

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值