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

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

  • 1 问题解释
  • 2 测试数据
  • 3 测试代码
    • 3.1 已有的数据
    • 3.2 指定范围的数据
    • 3.3 匹配数据
  • 4 结果验证

手动反爬虫,禁止转载: 原博地址 https://blog.csdn.net/lys_828/article/details/117573985

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

1 问题解释

【python数据处理】DataFrame根据列表中的元素提取已知字段数据中包含元素的数据并形成一列_第1张图片
题目读完可能不是很好理解这个问题,那么就列举一个示例数据图进行演示,如下。就是根据已有的数据,然后按照清洗的规定,会有一个指定的范围,如果这个范围里面的数据是存在已有的数据里面,那么就把这个范围中的元素提取出来,否则就是空,最后的数据长度和已有的数据长度相同

要求:

  • 三个数据:已有数据/指定的范围数据/清洗后的数据
  • 限定条件:(1)被指定范围中的元素如果在已有数据列表中,输出指定范围中的元素,如果不在就输出空;(2)已有数据的数据量和被指定范围的元素数量没有要求,可以是已有的数据量多,也可以是被指定范围的元素数量多;(3)清洗后的数据量必须等于已有的数据量
    【python数据处理】DataFrame根据列表中的元素提取已知字段数据中包含元素的数据并形成一列_第2张图片

2 测试数据

如下的数据中,可以看出左侧是对身体部位数据类型的名称的中英文称呼,最后面是出现的计数。其中①部分是包含②部分的,因此清洗数据中就有了上面的要求
【python数据处理】DataFrame根据列表中的元素提取已知字段数据中包含元素的数据并形成一列_第3张图片
已有数据就是上面截图的内容,那么指定范围的数据就是第①部分所有身体部位组成的列表数据,最后就是根究这两个数据进行筛选想要的结果

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

3 测试代码

3.1 已有的数据

从DataFrame中提取一列就是一个Series数据,其中数据量共有1212条
【python数据处理】DataFrame根据列表中的元素提取已知字段数据中包含元素的数据并形成一列_第4张图片

3.2 指定范围的数据

按照国家标准GB6441-86对伤害部位进行分类,具体的分类如下。
【python数据处理】DataFrame根据列表中的元素提取已知字段数据中包含元素的数据并形成一列_第5张图片
故最终指定范围的数据如下,共有15条数据
【python数据处理】DataFrame根据列表中的元素提取已知字段数据中包含元素的数据并形成一列_第6张图片

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条数据,和已有的数据量相同
【python数据处理】DataFrame根据列表中的元素提取已知字段数据中包含元素的数据并形成一列_第7张图片
单独提取这两列数据进行查看,可以发现在显示出来的内容中是完成了清洗匹配
【python数据处理】DataFrame根据列表中的元素提取已知字段数据中包含元素的数据并形成一列_第8张图片

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,那么就说明数据清洗匹配成功了
【python数据处理】DataFrame根据列表中的元素提取已知字段数据中包含元素的数据并形成一列_第9张图片
最后一步进行核实(可以看一下列中的元素唯一值,也可以对元素进行计数,后者前提要求数据中没有空)

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

输出结果为:可以发现查看元素的唯一值只有True,计数也只有一类而且数据量是1212,没有缺失值,综上就可以认为完成任务,数据清洗干净了
【python数据处理】DataFrame根据列表中的元素提取已知字段数据中包含元素的数据并形成一列_第10张图片
撒花✿✿ヽ(°▽°)ノ✿,数据清洗是真心不容易

你可能感兴趣的:(#,python数据处理,python,数据清洗,DataFrame,数据匹配,指定范围)