今天是 Kaggle 数据清洗挑战的第四天,任务是对字符进行编码处理~

分为四个部分来学习:

  1. Get our environment set up
  2. What are encodings?
  3. Reading in files with encoding problems
  4. Saving your files with UTF-8 encoding

1、搭建环境

首先还是引入需要的 lib 包:

# modules we'll use
import pandas as pd
import numpy as np# helpful character encoding module
import chardet# set seed for reproducibility
np.random.seed(0)

2、什么是编码?

字符编码(Character Encoding)是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。例如:将字符串 0110100001101001 编码为人类能读懂的文本 “hi”。

现阶段存在很多不同的编码规则,其中最重要的一个就是 UTF-8:

UTF-8(8-bit Unicode Transformation Format)是一种针对 Unicode 的可变长度字符编码,又称万国码。UTF-8 用 1 到 6 个字节编码 Unicode 字符。用在网页上可以统一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。

先看一个例子,设定一段字符串,类型的输出结果为 str:

# start with a string
before = "This is the euro symbol: €"# check to see what datatype it is
type(before)

然后对这个字符串进行 UTF-8 编码:

# encode it to a different encoding, replacing characters that raise errors
after = before.encode("utf-8", errors = "replace")# check the type
type(after)

如果你查看一个 bytes 类型的对象,你会发现结果前边有一个字母 b,后面跟着一串文本,这是因为这段文本被识别为了由 ASCII 编码过的数据。我们也看到欧元符号被识别为了一些 “mojibake“,这是因为 ASCII 是一种比较老的编码方式,有一些新的符号没有被加入。

# take a look at what the bytes look like
after

当我们用正确的方式来进行解码时,也得到了正确的结果:

# convert it back to utf-8
print(after.decode("utf-8"))

当我们使用不同的编码方式来对 bytes 进行解码时,就会输出错误:

# try to decode our bytes with the ascii encoding
print(after.decode("ascii"))

当我们用其他编码方式将 string 转化为 bytes ,再进行解码时,也会输出错误,因为 python 3 默认的编码方式是 UTF-8,如果我们使用 ASCII:

# start with a string
before = "This is the euro symbol: €"# encode it to a different encoding, replacing characters that raise errors
after = before.encode("ascii", errors = "replace")# convert it back to utf-8
print(after.decode("ascii"))# We've lost the original underlying byte string! It's been
# replaced with the underlying byte string for the unknown character :(


3、读文件时可能遇到的编码问题

我们平时遇到的大多数文件都是 UTF-8 编码的,这也是 python 所期望的,但有时候遇到非 UTF-8 编码的文件就会输出错误:

解决错误的一个办法就是去尝试不同的编码规则,看看哪一个可以正常工作。还有一个途径是用 chardet 来获取其编码规则,但也不保证结果 100% 正确。

我们可以先查看文件的前 10000 个字节,一般来说已经足够来推测整个文件的编码规则:

# look at the first ten thousand bytes to guess the character encoding
with open("../input/kickstarter-projects/ks-projects-201801.csv", 'rb') as rawdata:result = chardet.detect(rawdata.read(10000))# check what the character encoding might be
print(result)

从结果来看,chardet 有 73% 的自信确定该文件的编码方式为 Windows-1252,下面来检验这个结果是否正确:

# read in the file with the encoding detected by chardet
kickstarter_2016 = pd.read_csv("../input/kickstarter-projects/ks-projects-201612.csv", encoding='Windows-1252')# look at the first few lines
kickstarter_2016.head()

没有报错,可以显示该数据集的前5条记录,说明 chardet 的结果是正确的!


4、使用 UTF-8 编码方式来保存文件

UTF-8 是 python 的标准编码方式,当我们保存一个文件时,将默认为使用 UTF-8:

# save our file (will be saved as UTF-8 by default!)
kickstarter_2016.to_csv("ks-projects-201801-utf8.csv")

这就是 5 Day Challenge 第四天的内容,完毕~

欢迎关注我的知乎专栏【数据池塘】,专注于分享机器学习、数据挖掘相关内容:https://zhuanlan.zhihu.com/datapool

⬇️ 扫描下方二维码关注公众号【数据池塘】 ⬇️

回复【算法】,获取最全面的机器学习算法网络图:

Kaggle 数据清洗挑战 Day 4 - 字符编码(Character Encoding)处理相关推荐

  1. Kaggle 数据清洗挑战 Day 5 - 处理不一致数据

    今天是 Kaggle 数据清洗挑战的第五天,转眼最后一天啦!这次任务是处理拼写不一致的数据,例如"康涅狄格州"可能被记录为 "Connecticut".&quo ...

  2. Kaggle 数据清洗挑战 Day 3 - 快速解析日期(date)数据

    今天是 Kaggle 数据清洗挑战的第三天,任务是解析 date 型数据.相信我们都遇到过此类情况,拿到的数据集中有需要分析的日期数据,但它们的类型是 String,不便作图,也不适合作为一个 fac ...

  3. Kaggle 数据清洗挑战 Day 2 - 数据缩放及标准化处理

    今天是 Kaggle 数据清洗挑战的第二天,任务是进行数据缩放(scaling)及标准化处理(normalization),分为四个部分: Get our environment set up Sca ...

  4. Kaggle 数据清洗挑战 Day 1 - 手把手教你五步处理缺失值

    前些天报名参加了 Kaggle 的 Data Cleaning 5天挑战,5天的任务如下: Day 1: Handling missing values Day 2: Data scaling and ...

  5. varchar汉字占几个字符_常用字符编码介绍

    在百度百科中,是这样定义的,字符编码(Character encoding)也叫字符码,是把中的为指定中某一(例如:模式..8位组或者),以便在中存储和通过的传递.实际上就就记住一句话,字符编码就是为 ...

  6. 关于Unicode,字符集,字符编码

    基本概念 字符[character] 字符代表了字母表中的字符,标点符号和其他的一些符号.在计算机中,文本是由字符组成的. 字符集合[character set] 由一套用于特定用途的字符组成,例如支 ...

  7. python中字符编码使用_python中字符编码是什么?如何转换字符?

    屏幕前我们看到的文字,在计算机中也是这样表示吗?事实上,我们所有的信息电脑是无法直接理解的,同样我们所要表达的信息,计算机也不能看懂.这就需要架起一个理解的桥梁,也就是编码帮助我们相互之间进行翻译.今 ...

  8. 【转】刨根究底字符编码【2.0版】(2):关键术语解释

    上一篇中讲道,字符编码所涉及的面非常广,向下的话,涉及到计算机的底层技术,甚至是硬件实现. 因此,这里就让我们从字符编码涉及到的最基本的术语讲起.大部分术语你可能都已经有了解了,但我们现在从字符编码的 ...

  9. 【转】刨根究底字符编码之一——关键术语解释(上)

    声明:本系列文章参考了网上的大量资料,除了少部分资料由于未作大量修改(但基本也有少量修改,因为网上文章随意性较大,如若不改反而让人迷糊)而标明了出处之外,其余由于已作了大量改写,因此没有再一一说明,在 ...

最新文章

  1. .net中的IO体系介绍
  2. nanopi基础配置
  3. vscode setting json_win10+letex+vscode+texlive+latex workshop+sumatrapdf
  4. 转载之NetApp RAID技术介绍
  5. 在Spring中使用jOOQ:CRUD
  6. 添加自定义菜单,报错40155
  7. python全栈要学什么_python全栈要学什么 python全栈学习路线
  8. VLAN学习笔记大全(1)
  9. 【英语学习】【WOTD】veritable 释义/词源/示例
  10. pythonexcel计算横列总和-在python中,如何在字典中找到值的总和?每个键都有多个值...
  11. Ubuntu 16.04 下安装运行 Suricata
  12. 单片机p2.0引脚c语言,单片机C语言教程二
  13. 智能人物画像综合分析系统——Day7
  14. Windows2016 L2TP配置(预共享密钥模式)
  15. Unity(游戏)中五种数据存储的方法
  16. 扫地机器人路径规划算法
  17. Linux虚拟机安装及Docker常用操作
  18. 软件泛指计算机运行,广义地讲,软件泛指计算机运行所需的各种数据、及与之相关的文档资料...
  19. UR5机器人学习之TCP/IP通讯
  20. SSO方式实现微服务的登入业务

热门文章

  1. android指南针校准 代码_Android 指南针传感器
  2. python direct_Python Qt.DirectConnection方法代码示例
  3. 如何科学的使用华为云
  4. Selenium的一些技巧与错误处理
  5. html图片实现左右滑动,jquery实现左右滑动式轮播图
  6. WIN7部分程序中文乱码的简单解决方法
  7. 用友U8常见问题之最大单据号修复语句
  8. 自定义View的学习(一)
  9. Windows Server 2012之ISCSI目标服务器群集
  10. day08面向对象+