脏数据清洗,pandas.apply()的应用

原数据如下所示:

IMAGETYPE count
.?+? 1713
Jh.5? 100
.??U 38
.11.1 1
.13.1 1
.15.11 2

我需要对数据内的带有特殊符号,且第一个逗号前的数据进行清洗。

分析清洗条件:

1.含有字符如:?,<,>,),(,=,# 的数据全部清洗drop

2.第一个逗号前面,得满足条件1)可以带有首字母a或A;2)数字部分不能大于29

分析思路:

1.创建函数,判断字符串,由于用的Series,所以用apply()就可以对每个元素进行判断操作,读进来是一个字符串,如果是dataframe格式,需要使用applymap()才能读到每个元素

2.首先判断读进来的字符串是否含有特殊字符,这里用了一个循环判断

3.然后切割字符串,判断第一个元素是不是空;是不是含有A或a;是不是数字小于29

4.如果不满足上述条件的,都返回 None,方便在dataframe中使用dropna()删除脏数据

完整代码如下:

import pandas as pd
df = pd.read_csv(r'Result_6.csv')


def re(x):
    list1 = ["-","?","=","@","*","(",">"]
    for i in list1:
        if i in x:
            return None
    a = x.split(".")
    try:
        if a[0] == '':
            return None
        elif a[0][0] == 'a' or a[0][0] == 'A':
                if int(a[0][1:]) > 29:
                    return None
        elif int(a[0]) > 29:
            return None
    except:
        return None
    return x


df["IMAGETYPE"] = df["IMAGETYPE"].apply(re)
df = df.dropna(axis=0, how="any")
df.to_csv('clean3.csv', encoding='utf-8')
posted @ 2021-07-28 17:44  沐沐子枫  阅读(134)  评论(0编辑  收藏  举报