【python数据处理】DataFrame根据列表中的元素提取已知字段数据中包含元素的数据并形成一列

  • Post author:
  • Post category:python


DataFrame根据指定范围的元素提取已有列数据中包含元素的数据并形成一列

手动反爬虫,禁止转载:

原博地址

https://blog.csdn.net/lys_828/article/details/117573985

 知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息



1 问题解释

在这里插入图片描述

题目读完可能不是很好理解这个问题,那么就列举一个示例数据图进行演示,如下。就是根据已有的数据,然后按照清洗的规定,会有一个指定的范围,如果这个范围里面的数据是存在已有的数据里面,那么就把这个范围中的元素提取出来,否则就是空,最后的数据长度和已有的数据长度相同

要求:

  • 三个数据:已有数据/指定的范围数据/清洗后的数据
  • 限定条件:(1)被指定范围中的元素如果在已有数据列表中,输出指定范围中的元素,如果不在就输出空;(2)已有数据的数据量和被指定范围的元素数量没有要求,可以是已有的数据量多,也可以是被指定范围的元素数量多;(3)清洗后的数据量必须等于已有的数据量

    在这里插入图片描述



2 测试数据

如下的数据中,可以看出左侧是对身体部位数据类型的名称的中英文称呼,最后面是出现的计数。其中①部分是包含②部分的,因此清洗数据中就有了上面的要求

在这里插入图片描述

已有数据就是上面截图的内容,那么指定范围的数据就是第①部分所有身体部位组成的列表数据,最后就是根究这两个数据进行筛选想要的结果

#被指定范围的数据
ls = ['颅脑','面颌部','眼部','鼻','耳','口','颈部','胸部','腰部','腹部','脊柱','上肢','腕及手','下肢','踝及脚']



3 测试代码



3.1 已有的数据

从DataFrame中提取一列就是一个Series数据,其中数据量共有1212条

在这里插入图片描述



3.2 指定范围的数据

按照国家标准GB6441-86对伤害部位进行分类,具体的分类如下。

在这里插入图片描述

故最终指定范围的数据如下,共有15条数据

在这里插入图片描述



3.3 匹配数据

具体的匹配过程就是两步,遍历得到是否存在的判断和对应匹配的元素,然后在根据判断的结果将匹配的元素填到对应位置,因此就可以封装两个函数进行

第一个函数就是完成第一步,第二个函数完成第二步

#对指定范围的数据进行遍历,判断是否在已有数据里面
def test(s):
    for item in ls:
        if item in s:
            return True,item

#如果在已有数据里面,就将匹配的元素添加在对应的位置上      
def f(s):
    if test(s)[0]:
        return test(s)[1]

data_merge['test'] = data_merge['train'].apply(f)
data_merge['test']

直接操作DataFrame中的一列,进行数据匹配,可以发现最后的输出结果也是1212条数据,和已有的数据量相同

在这里插入图片描述

单独提取这两列数据进行查看,可以发现在显示出来的内容中是完成了清洗匹配

在这里插入图片描述



4 结果验证

虽然最后筛选的数据量也是1212了,看似与已有数据量一致,但是可能存在巧合的情况,因此就需要验证一下是不是提取的准确无误,就需要判断test中的数据是不是每个单元格的数据都在train的单元格中,因此封装一个函数进行验证,代码如下

#验证匹配是否正确
def verification(x1,x2):
    if x2 in x1:
        return True
    else:
        return False
data_merge['verify'] = data_merge.apply(lambda x: verification(x.train,x.test),axis= 1)
data_merge[['train','test','verify']]

输出结果为,在可见的肉眼中,都是True,最后只需要确认一下verify一列的元素都是True,那么就说明数据清洗匹配成功了

在这里插入图片描述

最后一步进行核实(可以看一下列中的元素唯一值,也可以对元素进行计数,后者前提要求数据中没有空)

data_merge['verify'].unique()
data_merge['verify'].value_counts()

输出结果为:可以发现查看元素的唯一值只有True,计数也只有一类而且数据量是1212,没有缺失值,综上就可以认为完成任务,数据清洗干净了

在这里插入图片描述

撒花✿✿ヽ(°▽°)ノ✿,数据清洗是真心不容易



版权声明:本文为lys_828原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。