Kaggle 数据清洗挑战 Day 4 - 字符编码(Character Encoding)处理
今天是 Kaggle 数据清洗挑战的第四天,任务是对字符进行编码处理~
分为四个部分来学习:
- Get our environment set up
- What are encodings?
- Reading in files with encoding problems
- 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)处理相关推荐
- Kaggle 数据清洗挑战 Day 5 - 处理不一致数据
今天是 Kaggle 数据清洗挑战的第五天,转眼最后一天啦!这次任务是处理拼写不一致的数据,例如"康涅狄格州"可能被记录为 "Connecticut".&quo ...
- Kaggle 数据清洗挑战 Day 3 - 快速解析日期(date)数据
今天是 Kaggle 数据清洗挑战的第三天,任务是解析 date 型数据.相信我们都遇到过此类情况,拿到的数据集中有需要分析的日期数据,但它们的类型是 String,不便作图,也不适合作为一个 fac ...
- Kaggle 数据清洗挑战 Day 2 - 数据缩放及标准化处理
今天是 Kaggle 数据清洗挑战的第二天,任务是进行数据缩放(scaling)及标准化处理(normalization),分为四个部分: Get our environment set up Sca ...
- Kaggle 数据清洗挑战 Day 1 - 手把手教你五步处理缺失值
前些天报名参加了 Kaggle 的 Data Cleaning 5天挑战,5天的任务如下: Day 1: Handling missing values Day 2: Data scaling and ...
- varchar汉字占几个字符_常用字符编码介绍
在百度百科中,是这样定义的,字符编码(Character encoding)也叫字符码,是把中的为指定中某一(例如:模式..8位组或者),以便在中存储和通过的传递.实际上就就记住一句话,字符编码就是为 ...
- 关于Unicode,字符集,字符编码
基本概念 字符[character] 字符代表了字母表中的字符,标点符号和其他的一些符号.在计算机中,文本是由字符组成的. 字符集合[character set] 由一套用于特定用途的字符组成,例如支 ...
- python中字符编码使用_python中字符编码是什么?如何转换字符?
屏幕前我们看到的文字,在计算机中也是这样表示吗?事实上,我们所有的信息电脑是无法直接理解的,同样我们所要表达的信息,计算机也不能看懂.这就需要架起一个理解的桥梁,也就是编码帮助我们相互之间进行翻译.今 ...
- 【转】刨根究底字符编码【2.0版】(2):关键术语解释
上一篇中讲道,字符编码所涉及的面非常广,向下的话,涉及到计算机的底层技术,甚至是硬件实现. 因此,这里就让我们从字符编码涉及到的最基本的术语讲起.大部分术语你可能都已经有了解了,但我们现在从字符编码的 ...
- 【转】刨根究底字符编码之一——关键术语解释(上)
声明:本系列文章参考了网上的大量资料,除了少部分资料由于未作大量修改(但基本也有少量修改,因为网上文章随意性较大,如若不改反而让人迷糊)而标明了出处之外,其余由于已作了大量改写,因此没有再一一说明,在 ...
最新文章
- .net中的IO体系介绍
- nanopi基础配置
- vscode setting json_win10+letex+vscode+texlive+latex workshop+sumatrapdf
- 转载之NetApp RAID技术介绍
- 在Spring中使用jOOQ:CRUD
- 添加自定义菜单,报错40155
- python全栈要学什么_python全栈要学什么 python全栈学习路线
- VLAN学习笔记大全(1)
- 【英语学习】【WOTD】veritable 释义/词源/示例
- pythonexcel计算横列总和-在python中,如何在字典中找到值的总和?每个键都有多个值...
- Ubuntu 16.04 下安装运行 Suricata
- 单片机p2.0引脚c语言,单片机C语言教程二
- 智能人物画像综合分析系统——Day7
- Windows2016 L2TP配置(预共享密钥模式)
- Unity(游戏)中五种数据存储的方法
- 扫地机器人路径规划算法
- Linux虚拟机安装及Docker常用操作
- 软件泛指计算机运行,广义地讲,软件泛指计算机运行所需的各种数据、及与之相关的文档资料...
- UR5机器人学习之TCP/IP通讯
- SSO方式实现微服务的登入业务