前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单实用的数据清洗代码

简单实用的数据清洗代码

作者头像
AI研习社
发布2019-05-08 17:06:38
1K0
发布2019-05-08 17:06:38
举报
文章被收录于专栏:AI研习社

本文为 AI 研习社编译的技术博客,原标题 : The Simple Yet Practical Data Cleaning Codes 作者 | Admond Lee 翻译 | 泰丝·路易斯 校对 | 酱番梨 审核 | 约翰逊·李加薪 整理 | 立鱼王 原文链接: https://towardsdatascience.com/the-simple-yet-practical-data-cleaning-codes-ad27c4ce0a38

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

Garbage in, Garbage out

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

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

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

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

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

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

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

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

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

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

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

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

让我们开始吧!

我的小工具之数据处理

1. 删除多列数据
代码语言:javascript
复制
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. 改变数据类型
代码语言:javascript
复制
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处理大型数据感兴趣,我强烈建议你看一看这篇文章——为什么和如何用Pandas处理大型数据。

3. 将类别变量转为数值变量
代码语言:javascript
复制
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)

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

4. 检查丢失数据

代码语言:javascript
复制
def check_missing_data(df):
      # check for any missing data in the df (display in descending order)
      return df.isnull().sum().sort_values(ascending=False)

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

5. 在列中移除字符串

代码语言:javascript
复制
def remove_col_str(df):
      # remove a portion of string in a dataframe 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. 在列中移除空格
代码语言:javascript
复制
def remove_col_white_space(df,col):
      # remove white space at the beginning of string 
      df[col] = df[col].str.lstrip()
当数据混乱时,任何事都有可能。所以列中字符串前有空格的情况时有发生。因此,如果你想移除它们时,这个办法很管用。
7. 用字符串(在指定条件下)合并列
代码语言:javascript
复制
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 emtpy space

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

8.转换时间戳(从string到datetime类型)
代码语言:javascript
复制
def convert_str_datetime(df): 
      '''
      AIM    -> Convert datetime(String) to datetime(format we want)
     
      INPUT  -> df
    
      OUTPUT -> updated df with new datetime format 
      ------
      '''
      df.insert(loc=2, column='timestamp', value=pd.to_datetime(df.transdate, format='%Y-%m-%d %H:%M:%S.%f'))

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

尾声

谢谢你的阅读。

这些代码本质上实现起来相对简单。 我希望这个数据清理的小工具箱让你能更自信地执行数据清理,并能通过我的经验对数据集样貌拥有更广泛的思考。

与往常一样,如果您有任何问题或意见,请随时留下您的反馈,或者您可以随时通过LinkedIn与我联系。 至此,下一篇文章中见!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么这篇文章对你很重要
  • 我的小工具之数据处理
    • 1. 删除多列数据
      • 2. 改变数据类型
        • 3. 将类别变量转为数值变量
          • 6. 在列中移除空格
            • 当数据混乱时,任何事都有可能。所以列中字符串前有空格的情况时有发生。因此,如果你想移除它们时,这个办法很管用。
              • 7. 用字符串(在指定条件下)合并列
                • 8.转换时间戳(从string到datetime类型)
                • 尾声
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档