选自towardsdatascience,作者:Admond Lee,机器之心编译,参与:Geek AI、张倩。

数据清洗是数据科学家逃不掉的一份苦差事。为了让这项工作不那么痛苦,本文作者分享了自己的数据清洗代码集。

现实世界中的数据通常质量不高,作为一名数据科学家,有时也需要承担一部分数据清洗的工作,这要求数据科学家们应该能够在进行数据分析或建模工作之前执行数据清洗步骤,从而确保数据的质量最佳。

不过长话短说,在数据科学领域工作了很长一段时间后,我切实感受到了在进行数据分析、可视化和建模工作之前,进行数据清洗工作是多么痛苦。

不管你承不承认,数据清洗着实不是一件简单的任务,大多数情况下这项工作是十分耗时而乏味的,但它又是十分重要的。

如果你经历过数据清洗的过程,你就会明白我的意思。而这正是撰写这篇文章的目的——让读者更轻松地进行数据清洗工作。

事实上,我在不久前意识到,在进行数据清洗时,有一些数据具有相似的模式。也正是从那时起,我开始整理并编译了一些数据清洗代码(见下文),我认为这些代码也适用于其它的常见场景。

由于这些常见的场景涉及到不同类型的数据集,因此本文更加侧重于展示和解释这些代码可以用于完成哪些工作,以便读者更加方便地使用它们。

我的数据清洗小工具箱

在下面的代码片段中,数据清洗代码被封装在了一些函数中,代码的目的十分直观。你可以直接使用这些代码,无需将它们嵌入到需要进行少量参数修改的函数中。

1. 删除多列数据

def drop_multiple_col(col_names_list, df): '''AIM    -> Drop multiple columns based on their column names INPUT  -> List of column names, dfOUTPUT -> 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 memoryINPUT  -> List of column names (int, float), dfOUTPUT -> 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 variablenum_encode = {'col_1' : {'YES':1, 'NO':0},'col_2'  : {'WON':1, 'LOSE':0, 'DRAW':0}}  df.replace(num_encode, inplace=True)  

有一些机器学习模型要求变量是以数值形式存在的。这时,我们就需要将分类变量转换成数值变量然后再将它们作为模型的输入。对于数据可视化任务来说,我建议大家保留分类变量,从而让可视化结果有更明确的解释,便于理解。

4. 检查缺失的数据

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. 删除列中的字符串

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

有时你可能会看到一行新的字符,或在字符串列中看到一些奇怪的符号。你可以很容易地使用 df['col_1'].replace 来处理该问题,其中「col_1」是数据帧 df 中的一列。

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 emtpy space

当你希望在一定条件下将两列字符串数据组合在一起时,这种方法很有用。例如,你希望当第一列以某些特定的字母结尾时,将第一列和第二列数据拼接在一起。根据你的需要,还可以在拼接工作完成后将结尾的字母删除掉。

8. 转换时间戳(从字符串类型转换为日期「DateTime」格式)

def convert_str_datetime(df): '''AIM    -> Convert datetime(String) to datetime(format we want)INPUT  -> dfOUTPUT -> 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'))

在处理时间序列数据时,你可能会遇到字符串格式的时间戳列。这意味着我们可能不得不将字符串格式的数据转换为根据我们的需求指定的日期「datetime」格式,以便使用这些数据进行有意义的分析和展示。

原文链接:https://towardsdatascience.com/the-simple-yet-practical-data-cleaning-codes-ad27c4ce0a38

将某一列转换为字符类型_还在为数据清洗抓狂?这里有一个简单实用的清洗代码集...相关推荐

  1. pandas 将某一列转换为字符类型_6个冷门但实用的pandas知识点

    1 简介 pandas作为开展数据分析的利器,蕴含了与数据处理相关的丰富多样的API,使得我们可以灵活方便地对数据进行各种加工,但很多pandas中的实用方法其实大部分人都是不知道的,今天就来给大家介 ...

  2. 数字数据转换为字符数据_为什么替代数据对数字转换至关重要

    数字数据转换为字符数据 边缘是数据的未来(Fringe is the future of data) Alternative data has been a buzzword among invest ...

  3. nsa构架_我如何使用NSA的Ghidra解决了一个简单的CrackMe挑战

    nsa构架 by Denis Nuțiu 丹尼斯·努尤(Denis Nuțiu) 我如何使用NSA的Ghidra解决了一个简单的CrackMe挑战 (How I solved a simple Cra ...

  4. python如何编写数据库_如何在几分钟内用Python编写一个简单的玩具数据库

    python如何编写数据库 MySQL, PostgreSQL, Oracle, Redis, and many more, you just name it - databases are a re ...

  5. ios php mysql实例_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1

    原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...

  6. sql数字转换为字符_Python|图片转换为字符画^_^

    我们很清楚什么是图片,无外乎png.jpg等格式的文件,例如这个? 但什么是字符画呢?先看一下官方介绍: 字符画,一种由字母.标点.汉字或其他字符组成的图画.简单的字符画是利用字符的形状代替图画的线条 ...

  7. pandas 转换为文本类型_分享5个高效的pandas函数!

    点击上方蓝色字关注我们~ 作者:Soner Yıldırım 来源:Python大数据分析 1. explode explode用于将一行数据展开成多行.比如说dataframe中某一行其中一个元素包 ...

  8. pandas 转换为文本类型_将文本文件转换为pandas datafram

    我有.TX0文件(某种csv txt文件),并通过python.readlines().open(filename,'w')等方法将其转换为.txt文件.我有这个新保存的txt文件,但当我试图将其转换 ...

  9. 西门子触摸屏修改ip地址_基于博途V15 西门子S7-1200与触摸屏一个简单的例子

    本篇是<基于博途V15 西门子S7-1200 ...>系列的后续篇,看懂本篇文章之前请大家关注我,然后查找相关文章,学习之后再学习此篇.也请专业领域的大神批评指正. 感谢大家关注与支持! ...

  10. 钉钉python 自动发消息软件_利用Python自动发送钉钉数据消息,一个简单的上手小项目...

    现在大部分公司都使用钉钉作为内部的主要沟通工具,钉钉消息基本都上都能快速有效的被阅读,打开率会比邮件高上不少.所以准备使用钉钉来播报平台每日的成交额,并附上一些鼓励的话和图片.起到一个激励团队的作用 ...

最新文章

  1. TensorFlow 发布新版本v1.9(附应用实践教程)
  2. Spark出现java.lang.stackoverflowerror的解决方法
  3. CJCMS系列---慢慢讲电子商务在项目中的实践之前言
  4. IOS开发基础之团购案例17-xib和UITableView两种方式实现
  5. 多个php一个机器,如何利用docker在同一台机器上搭建多套php开发环境?
  6. 【CodeForces - 569B】Inventory (标记,乱搞)
  7. Java中Random详解
  8. centos5.9 安装mysql_centos 5.9 安装mysql 5.5.31
  9. 百度人脸识别技术应用001---百度人脸识别应用业务介绍
  10. mybatis运行原理详解
  11. mybatis操作mysql的奇淫技巧总结(代码库)
  12. server2012卸载oracle,Windows Server 2008 R2卸载干净ORACLE 11G
  13. mysql,sqlserver数据库单表数据过大的处理方式
  14. 什么是B2B,B2C,O2O?
  15. 电源管理允许此设备唤醒计算机怎么关掉,允许计算机关闭此设备以节省电量灰色 | MOS86...
  16. 乐趣国学—品读“富润屋,德润身。”中的智慧
  17. 【数据挖掘】1、综述:背景、数据的特征、数据挖掘的六大应用方向、有趣的案例
  18. 无线路由的beacon interval
  19. 红米手机安装google商店问题总结
  20. 计算机王怎么读英语怎么说,语音朗读翻译王电脑版

热门文章

  1. 类的继承与派生的基础学习
  2. 血管穿刺机器人研究汇总
  3. CVPR 2022NTIRE 2022|首个用于高光谱图像重建的 Transformer
  4. 致敬CondConv!Intel提出即插即用的“万金油”动态卷积ODConv
  5. 编程漫谈及计算机硬件简介
  6. WebSocket 实现链接 群聊(low low low 版本)
  7. media type
  8. linux学习笔记(13)终端清屏
  9. MySQL select
  10. Winfrom 中如何实现combox 的列表自动显示ToolTip提示