首页 文章详情

如何正确读入文本数据不乱码(解决文本乱码问题)

大邓和他的Python | 168 2022-11-22 16:16 0 0 0
UniSMS (合一短信)

乱码由来

相信大家使用Python读取txt、csv文件时,经常遇到UnicodeDecodeError错误,从字面意思看是 编码解码问题 。 关于编码解码相关知识推荐看B站柴知道制作的视频,了解

锟斤拷�⊠是怎样炼成的------中文显示"⼊"门指南【柴知道】


遇到乱码

在Python中,遇到文件读取乱码的可能性很大,例如

import pandas as pd

df = pd.read_csv('twitter_sentiment.csv')
df.head()

Run

c:\users\thunderhit\appdata\local\programs\python\python37-32\lib\site-packages\pandas\io\parsers.py in parser_f(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, dialect, error_bad_lines, warn_bad_lines, delim_whitespace, low_memory, memory_map, float_precision)
...

pandas\_libs\parsers.pyx in pandas._libs.parsers.TextReader._tokenize_rows()

pandas\_libs\parsers.pyx in pandas._libs.parsers.raise_parser_error()

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbd in position 10717: illegal multibyte sequence

可以看到报错, 遇到 UnicodeDecodeError 问题


使用encoding参数

常见的解决办法是在函数内加入encoding参数,中文最常见的编码方式有gbk、gb2312、utf-8。

import pandas as pd

#这里依次试验gbk、gb2312、utf-8
df = pd.read_csv('twitter_sentiment.csv', encoding='utf-8')
df.head()

依然出现 UnicodeDecodeError 问题 。所以encoding遇到很不常见的编码方式。


获取encoding参数

先获取 twitter_sentiment.csv 文件的编码方式,再进行读取操作。

import chardet

#读取为二进制数据
binary_data = open('twitter_sentiment.csv''rb').read()

#传给chardet.detect,稍等片刻
chardet.detect(binary_data)

Run

{'encoding': 'Windows-1252', 'confidence': 0.7291192008535122, 'language': ''}

由此得知该文件的编码方式为 Windows-1252 , 重新更改即可成功读入数据


成功读取

获取了正确的编码 encoding='Windows-1252', 就能正确的读入数据

import pandas as pd

#这里依次试验gbk、gb2312、utf-8
df = pd.read_csv('twitter_sentiment.csv', encoding='Windows-1252')
df.head()

Run


精选文章

从符号到嵌入:计算社会科学的两种文本表示

资料 | 量化历史学与经济学研究

长期征稿 | 欢迎各位前来投稿

17G数据集 | 深交所企业社会责任报告

70G数据集 | 上市公司定期报告数据集

27G数据集 | 使用Python对27G招股说明书进行文本分析

百度指数 | 使用qdata采集百度指数

推荐 | 社科(经管)文本分析快速指南

视频分享 | 文本分析在经管研究中的应用

Maigret库 | 查询某用户名在各平台网站的使用情况

MS | 使用网络算法识别创新的颠覆性与否

认知的测量 | 向量距离vs语义投影

Wordify | 发现和区分消费者词汇的工具

Asent库 | 英文文本数据情感分析

视频专栏课 | Python实证指标构建与文本分析

PNAS | 文本网络分析&文化桥梁Python代码实现

PNAS | 使用语义距离测量一个人的创新力(发散思维)得分

BERTopic库 | 使用预训练模型做话题建模

tomotopy | 速度最快的LDA主题模型

管理世界 | 使用文本分析词构建并测量短视主义

Wow~70G上市公司定期报告数据集

100min视频 | Python文本分析与会计

安装python包出现报错:Microsoft Visual 14.0 or greater is required. 怎么办?

R语言 | 使用posterdown包制作学术会议海报
R语言 | 使用ggsci包绘制sci风格图表
R语言 | 使用word2vec词向量模型

R语言 | 将多个txt汇总到一个csv文件中

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter