作者|KinLimLee编译|Qubit近日,大数据工程师KinLimLee在Medium上发表了一篇文章,介绍了8个数据清洗的Python代码。数据清洗是进行数据分析和利用数据训练模型的必由之路,也是数据科学家/程序员最耗费精力的地方。这些数据清洗的代码有两个好处:一是用函数写的,不用改参数就可以直接使用。第二个很简单,加上最长的评论只有11行。在介绍每段代码时,Lee都给出了目的,也在代码中给出了注释。您可以将本文加入书签并将其用作工具箱。8个场景的数据清洗代码这些数据清洗代码一共涵盖了8个场景,分别是:删除多列、改变数据类型、将分类变量转换为数值变量、检查缺失数据、删除列中的字符串、删除列中的空格、连接两列withstrings(withconditions),转换时间戳(从字符串到datetime格式)删除多列在做数据分析的时候并不是所有的列都有用,使用df.drop删除你指定的列会很方便。defdrop_multiple_col(col_names_list,df):AIM->根据列名删除多个列输入->列名列表,df输出->使用删除的列更新df------df.drop(col_names_list,axis=1、inplace=True)returndfconversiondatatype当数据集变大时,需要转换数据类型以节省内存。defchange_dtypes(col_int,col_float,df):AIM->改变数据类型以节省内存=df[col_int].astype(int32)df[col_float]=df[col_float].astype(float32)将分类变量转换为数值变量。某些机器学习模型要求变量采用数字格式。这需要先将分类变量转换为数值变量。同时,您还可以保留分类变量以进行数据可视化。defconvert_cat2num(df):#将分类变量转换为数值变量num_encode={col_1:{YES:1,NO:0},col_2:{WON:1,LOSE:0,DRAW:0}}df.replace(num_encode,inplace=True)Checkformissingdata如果要检查每列缺失数据的数量,使用下面的代码是最快的方法。它可以让您更好地了解哪些列有更多的缺失数据,从而确定如何进行下一步的数据清洗和分析。defcheck_missing_data(df):#检查df中是否有缺失数据(降序显示)returndf.isnull().sum().sort_values(ascending=False)删除列中的字符串有时,会出现新的string列出现字符或其他奇怪的符号,使用df['col_1'].replace即可轻松处理。defremove_col_str(df):#删除数据框列中的一部分字符串-col_1df[col_1].replace(,,regex=True,inplace=True)#删除列中(包括)之后的所有字符-col_1df[col_1].replace(.*,,regex=True,inplace=True)删除列中的空格当数据混乱时,任何事情都可能发生。字符串的开头经常有一些空格。在删除列中字符串开头的空格时,下面的代码非常有效。defremove_col_white_space(df):#删除字符串开头的空格df[col]=df[col].str.lstrip()jointwocolumnswithstring(withcondition)whenyouwanttoconditionallyusestringThiscodeishelpful将两列连接在一起时。例如,您可以在第一列的末尾设置某些字母,并使用它们连接到第二列。如果需要,也可以在连接完成后删除末尾的字母。defconcat_col_str_condition(df):#如果第一列的最后3个字母是pil,则用字符串连接2列mask=df[col_1].str.endswith(pil,na=False)col_new=df[mask][col_1]+df[mask][col_2]col_new.replace(pil,,regex=True,inplace=True)#将pil替换为空空格转换时间戳(从字符串到日期时间格式)在处理时间序列数据的时候,我们很时间戳列可能会遇到字符串格式。这意味着将字符串格式转换为日期时间格式(或我们根据需要指定的任何其他格式)以便对数据进行有意义的分析。defconvert_str_datetime(df):AIM->Convertdatetime(String)todatetime(formatwewant)INPUT->dfOUTPUT->updateddfwithnewdatetimeformat------df.insert(loc=2,column=)时间戳,值=pd.to_datetime(df.transdate,格式=%Y-%m-%d
