资源行业动态简单实用的数据清洗代码

简单实用的数据清洗代码

2019-10-22 | |  49 |   0

原标题:简单实用的数据清洗代码      来源:AI研习社   

链接:https://www.yanxishe.com/TextTranslation/1432


在我的一篇文章中(我的第一份数据科学实习),我曾讨论过数据清理有多么重要,并且这项工作经常在整个数据科学的工作流中占到40%-70%。这个世界并不完美,数据也是如此。


     垃圾进,则垃圾产出


现实世界的数据非常脏乱,我们作为数据科学家 - 有时也称为数据清理者 - 应该能够在进行任何数据分析或模型构建之前执行数据清理,以确保最高质量的数据。


长话短说,在数据科学领域相当长一段时间后,我确实感受到在处理数据分析,可视化和模型构建之前进行数据清理的痛苦。


承认与否,数据清理不是一项容易的任务,大多数时候它是耗时且乏味的,但这个过程太重要了,不容忽视。


如果你经历过这个过程,你会理解我的意思。 这正是我写这篇文章的原因,以帮助您以更平滑的方式执行数据清理。


为什么这篇文章对你很重要


01.png


(大意:关于数据科学,无论技术性与否,有哪些你一直想问或是弄明白的问题?不要紧。在评论区留言分享你的问题,我会尽我所能回答。如果我认为有必要,我会新开一篇博文圈你并讨论这个问题,这样你可以及时获得最新消息。那么……我们开始吧!2019,冲呀!)


一周前,我在领英上提问并解答了一些数据科学家和从业人员关于数据科学炙手可热的问题。


如果您一直关注我的工作,我在LinkedIn上忙于实现共享学习环境的民主化,以数据科学上为主,通过有抱负的数据科学家和其他不同专业知识和背景的数据专家的LinkedIn上发起讨论。 如果您想参与有关数据科学的有趣话题的讨论,请随时LinkedIn关注我。 您会对数据科学社区的参与和支持感到惊讶。?


02.png


我在评论中收获了不少有趣的问题。 然而,Anirban提到了一个重要的问题,我最终决定撰写一篇文章来回答这个问题,因为我不时会收到类似的问题。


事实上,不久前我意识到一些数据在数据清理方面有类似的模式。 自此,我开始组织和编译一些我认为适用于其他常见场景的数据清理代码 - 我用于数据清理的小工具箱。


由于此处的常见方案跨越不同类型的数据集,因此本文着重于展示和解释代码的用途,以便您可以轻松地进行调用。


在本文的最后,我希望你能找到有用的代码,这将使你的数据清理过程更加快速有效。


让我们开始吧!

我的小工具箱之数据处理

1. 删除多列数据

def drp_multiple_col(col_names_list, df):
   df.drop(col_names_list, axis=1, inplace=True)

有时,并不是所有列都对我们的分析有用。因此,df.drop函数是一个得心应手的工具去移除你指定的列。

2. 改变数据类型

def change_dtypes(col_int, col_float, df):
   df[col_int] = df[col_int].astype('int32')
   df[col_float] = df[col_float].astype('float32')

当一个数据集变大时,为了,我们需要dtypes 。如果你对学习如何用Pandas处理大型数据感兴趣,我强烈建议你看一看这篇文章——为什么和如何用Pandas处理大型数据

3. 将类别变量转为数值变量

def convert_cat2num(df):
   num_encode = { 'col_1': {'YES':1, 'NO':0},
                              'col_2': {'WON': 1, 'LOSE': 0, 'DRAW': 0}}
   df.replace(num_code, inplace=True)

有些机器学习模型要求变量为数值形式。这时,在把数据输入进模型前,我们需要将类别变量转为数值变量。对于数据可视化,我建议维持类编变量以便有一个更直观的解释和理解。


4. 检查丢失数据

def check_missing_data(df):
   return df.isnull().sum().sort_values(ascending=False)

如果你想检查每列中丢失数据的数量,这是最快速的方法。这给你一个更好的用以理解哪些列有更多数量的丢失数据,可以决定下一步数据清理和分析的方向。


5. 在列中移除字符串

def remove_col_str(df):
   # remove a portion of string in a datafram column - col_1
   df['col_1'].replace('n', '', regex=True, inplace=True)
   # remove all the characters after &#(including &#) for column-col_1
   df['col_1'].replace(' &#.*', '', regex=True, inplace=True)

有些时候,在你字符串类型的列中,你可能要面对换行符或是奇怪的符号的出现。这个问题可以被df['col_1'].replace轻松解决, 其中,col_1指的是数据帧中的某列。


6. 在列中移除空格

def remove_col_white_space(df):
   # remove white space at the beginning of string
   df[col] = df[col].str.lstrip()

当数据混乱时,任何事都有可能。所以列中字符串前有空格的情况时有发生。因此,如果你想移除它们时,这个办法很管用。

7. 用字符串(在指定条件下)合并列

def concat_col_str_condition(df):
   # concat 2 columns with strings if the last 3 letters of the first column are '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) #replace the 'pil' with empty space

当你想通过字符串把两列有条件的合并时,这个办法便派上用场。譬如,你想把第一列和第二列合并,条件是根据第一列中以特定字母们结束的字符串。在合并后,根据你的需要,末尾字母们也可被移除。

8.转换时间戳(从string到datetime类型)

def conver_str_datetime(df):
   df.insert(loc=2, column="timestamp", value=pd.to_datetime(df.transdate, format='%Y-%m-%d %H:%M:%S")

当处理时间序列数据时,这意味着我们很可能要将string格式转换到datetime格式——基于我们要求的特定格式——以便用数据做出有意义的分析和演示。


发起:王立鱼 校对:酱番梨 审核:约翰逊 · 李加薪

参与翻译(1人):泰丝•路易斯

英文原文:The Simple Yet Practical Data Cleaning Codes


THE END

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:解密 BERT

下一篇:“脑控+AI” 让人用“本能”驾驶

用户评价
全部评价

热门资源

  • 国内人才报告:机...

    近日,BOSS 直聘职业科学实验室 &BOSS 直聘研究院...

  • AI使物联网更智能...

    看到微软对物联网和人工智能的结合感兴趣是一个明...

  • 推荐一批学习自然...

    这里推荐一批学习自然语言处理相关的书籍,当然,...

  • 机器学习中的线性...

    机器学习中的线性回归是一种来源于经典统计学的有...

  • 安防智能化大势下...

    大部分传统安防设备不仅拍摄视野有限,而且无法事...