髒資料清洗,pandas.apply()的應用
阿新 • • 發佈:2021-07-28
原資料如下所示:
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')