现实世界中的数据通常是低质量的。作为数据科学家,有时需要承担部分数据清洗工作,这就要求数据科学家应该能够在建模工作之前进行数据分析或数据清洗步骤,从而保证最高质量的数据。但长话短说,在数据科学领域工作了很长时间后,我真切地感受到在数据分析、可视化和建模工作之前做数据清洗工作是多么痛苦。不管你承认与否,数据清洗并不是一件容易的事,很多时候这项工作是非常耗时和繁琐的,但却是非常重要的。如果您曾经经历过数据清理过程,您就会明白我的意思。而这也正是写这篇文章的目的——让读者更容易进行数据清洗。其实我前段时间就意识到,在做数据清洗的时候,有一些数据是有相似模式的。也是从那时起,我整理并编译了一些我认为也适用于其他常见场景的数据清理代码(见下文)。由于这些常见的场景涉及不同类型的数据集,本文更侧重于展示和解释这些代码可以用来做什么,以便读者更方便地使用它们。MyDataCleaningWidgetKit在下面的代码片段中,数据清洗代码被封装在一些函数中,代码的用途非常直观。您可以直接使用这些代码,而无需将它们嵌入需要少量参数修改的函数中。1.删??除多列数据defdrop_multiple_col(col_names_list,df):'''AIM->DropmultiplecolumnsbasedontheircolumnnamesINPUT->Listofcolumnnames,dfOUTPUT->updateddfwithdroppedcolumns------'''df.drop(col_names_list,axis=1,inplace=True)returndf有时候,并不是所有的列数据都对我们的数据分析工作有用。因此,“df.drop”可以方便地删除您选择的列。2.ConvertDtypesdefchange_dtypes(col_int,col_float,df):'''AIM->ChangingdtypestosavememoryINPUT->Listofcolumnnames(int,float),dfOUTPUT->updateddfwithsmallermemory------'''df[col_int]=df[col_int].astype('int32')df[col_float]=df[col_float].astype('float32')当我们面对更大的数据集时,我们需要转换“dtypes”以节省内存。如果您有兴趣学习如何将Pandas用于大数据,我强烈建议您阅读文章“为什么以及如何将Pandas用于大数据”(https://towardsdatascience.com/why-and-how-to-use-pandas-with-large-data-9594dda2ea4c)。3.将分类变量转换为数值变量defconvert_cat2num(df):#Convertcategoricalvariabletonumericalvariablenum_encode={'col_1':{'YES':1,'NO':0},'col_2':{'WON':1,'LOSE':0,'DRAW':0}}df.replace(num_encode,inplace=True)一些机器学习模型要求变量以数值形式存在。这时候我们就需要将分类变量转化为数值变量,然后作为模型的输入。对于数据可视化任务,我建议大家保留分类变量,这样可视化结果的解释更清晰,更容易理解。4.检查缺失数据defcheck_missing_data(df):#checkforanymissingdatainthedf(displayindescendingorder)returndf.isnull().sum().sort_values(ascending=False)如果要检查每列有多少缺失数据,这个大概是最多的快速的方式。这种方法可以让您更清楚地了解哪些列有更多的缺失数据,并帮助您决定在数据清理和数据分析工作中下一步要采取什么行动。5.删除列中的字符串defremove_col_str(df):#removeaportionofstringinadataframecolumn-col_1df['col_1'].replace('\n','',regex=True,inplace=True)#removeallthecharactersafter(including)forcolumn-col_1df['col_1'].replace('.*','',regex=True,inplace=True)有时你可能会看到换行字符,或者在字符串列中看到一些奇怪的符号。您可以使用df['col_1'].replace轻松处理此问题,其中“col_1”是数据框df中的一列。6、删除列中的空格defremove_col_white_space(df):#removewhitespaceatthebeginningofstringdf[col]=df[col].str.lstrip()当数据很乱时,会出现很多意想不到的情况。在字符串的开头有一些空格是很常见的。因此,当您要删除列中字符串开头的空格时,此方法很有用。7.拼接两列字符串数据(在特定条件下)defconcat_col_str_condition(df):#concat2columnswithstringsifthelast3letterssoftthefirstcolumnare'pil'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)#replacethe'pil'withemtpyspacewhenyouwantundercertainconditions这种方法很有用合并两列字符串数据时。例如,当第一列以某些特定字母结尾时,您希望连接第一列和第二列中的数据。根据您的需要,您也可以在拼接工作完成后删除结束字母。8.转换时间戳(从字符串类型到日期“DateTime”格式)defconvert_str_datetime(df):'''AIM->Convertdatetime(String)todatetime(formatwewant)INPUT->dfOUTPUT->updateddfwithnewdatetimeformat-----'''df.insert(loc=2,column='timestamp',value=pd.to_datetime(df.transdate,format='%Y-%m-%d%H:%M:%S.%f'))而使用时间序列数据时,您可能会遇到字符串格式的时间戳列。这意味着我们可能必须将字符串格式的数据转换为我们需要指定的“日期时间”格式,以便使用这些数据进行有意义的分析和展示。原文链接:https://towardsdatascience.com/the-simple-yet-practical-data-cleaning-codes-ad27c4ce0a38theMachine(id:almosthuman2014)”]点此阅读作者更多好文
