1. 程式人生 > 其它 >髒資料清洗,pandas.apply()的應用

髒資料清洗,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')