还在为数据清洗抓狂?这里有一个简单实用的清洗代码集
作者:CQITer小编 时间:2019-01-23 21:10
现实世界中的数据通常质量不高,作为一名数据科学家,有时也需要承担一部分数据清洗的工作,这要求数据科学家们应该能够在进行数据分析或建模工作之前执行数据清洗步骤,从而确保数据的质量最佳。

不过长话短说,在数据科学领域工作了很长一段时间后,我切实感受到了在进行数据分析、可视化和建模工作之前,进行数据清洗工作是多么痛苦。
不管你承不承认,数据清洗着实不是一件简单的任务,大多数情况下这项工作是十分耗时而乏味的,但它又是十分重要的。
如果你经历过数据清洗的过程,你就会明白我的意思。而这正是撰写这篇文章的目的——让读者更轻松地进行数据清洗工作。
事实上,我在不久前意识到,在进行数据清洗时,有一些数据具有相似的模式。也正是从那时起,我开始整理并编译了一些数据清洗代码(见下文),我认为这些代码也适用于其它的常见场景。
由于这些常见的场景涉及到不同类型的数据集,因此本文更加侧重于展示和解释这些代码可以用于完成哪些工作,以便读者更加方便地使用它们。
我的数据清洗小工具箱
在下面的代码片段中,数据清洗代码被封装在了一些函数中,代码的目的十分直观。你可以直接使用这些代码,无需将它们嵌入到需要进行少量参数修改的函数中。
1. 删除多列数据
def drop_multiple_col(col_names_list, df):
'''
AIM -> Drop multiple columns based on their column names
INPUT -> List of column names, df
OUTPUT -> updated df with dropped columns
------
'''
df.drop(col_names_list, axis=1, inplace=True)
return df
有时,并不是所有列的数据都对我们的数据分析工作有用。因此,「df.drop」可以方便地删掉你选定的列。
2. 转换 Dtypes
def change_dtypes(col_int, col_float, df):
'''
AIM -> Changing dtypes to save memory
INPUT -> List of column names (int, float), df
OUTPUT -> updated df with smaller memory
------
'''
df[col_int] = df[col_int].astype('int32')
df[col_float] = df[col_float].astype('float32')
当我们面对更大的数据集时,我们需要对「dtypes」进行转换,从而节省内存。如果你有兴趣学习如何使用「Pandas」来处理大数据,我强烈推荐你阅读「Why and How to Use Pandas with Large Data」这篇文章
(https://towardsdatascience.com/why-and-how-to-use-pandas-with-large-data-9594dda2ea4c)。
3. 将分类变量转换为数值变量
def convert_cat2num(df):
# Convert categorical variable to numerical variable
num_encode = {'col_1' : {'YES':1, 'NO':0},
'col_2' : {'WON':1, 'LOSE':0, 'DRAW':0}}
df.replace(num_encode, inplace=True)


