首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python -阅读列中包含多种语言的.csv

python -阅读列中包含多种语言的.csv
EN

Stack Overflow用户
提问于 2018-08-01 03:04:29
回答 1查看 1.9K关注 0票数 0

我正在尝试浏览最近发布的俄罗斯调查推文数据库。9个csv文件中的第一个:https://raw.githubusercontent.com/fivethirtyeight/russian-troll-tweets/master/IRAhandle_tweets_1.csv

数据集有一个列" content“,其中包含tweet内容。推文有超过50种语言。

有没有办法用这样的编码来读取.csv,以便在同一数据集中至少正确显示拉丁+西里尔字母的tweet?

我尝试了使用UTF-8和cp1251的pd.read_csv,但到目前为止还没有成功。拉丁语推文显示正确,西里尔文-不。

例如,文件中的第372行读取为二进制,其值如下:

代码语言:javascript
复制
(b'2528776985,1488REASONS,"\xc3\x90\xc2\x9f\xc3\x91\xc2\x80\xc3\x90\xc2\xb8'
 b'\xc3\x91\xc2\x87\xc3\x90\xc2\xb8\xc3\x90\xc2\xbd\xc3\x90\xc2\xb0 #67'
 b' \xc3\x90\xc2\x9c\xc3\x91\xc2\x83\xc3\x91\xc2\x82\xc3\x90\xc2'
 b'\xba\xc3\x90\xc2\xbe: \xc3\x82\xc2\xab\xc3\x90\xc2\x97\xc3\x90\xc2\xb5\xc3'
 b'\x90\xc2\xbd\xc3\x90\xc2\xb8\xc3\x91\xc2\x82-\xc3\x90\xc2\x90'
 b'\xc3\x91\xc2\x80\xc3\x90\xc2\xb5\xc3\x90\xc2\xbd\xc3\x90\xc2\xb5'
 b'\xc3\x82\xc2\xbb \xc3\x90\xc2\xb4\xc3\x90\xc2\xbb\xc3\x91\xc2\x8f \xc3\x90'
 b'\xc2\xb0\xc3\x90\xc2\xb4\xc3\x90\xc2\xb0\xc3\x90\xc2\xbf\xc3\x91'
 b'\xc2\x82\xc3\x90\xc2\xb0\xc3\x91\xc2\x86\xc3\x90\xc2\xb8\xc3\x90'
 b'\xc2\xb8 \xc3\x90\xc2\xba \xc3\x90\xc2\xa7\xc3\x90\xc2\x9c \xc3\x90\xc2'
 b'\xbf\xc3\x90\xc2\xbe\xc3\x91\xc2\x82\xc3\x91\xc2\x80\xc3\x90\xc2'
 b'\xb5\xc3\x90\xc2\xb1\xc3\x91\xc2\x83\xc3\x90\xc2\xb5\xc3\x91\xc2'
 b'\x82\xc3\x91\xc2\x81\xc3\x91\xc2\x8f 1,5\xc3\xa2\xc2\x80\xc2\x932'
 b' \xc3\x90\xc2\xbc\xc3\x90\xc2\xbb\xc3\x91\xc2\x80\xc3\x90\xc2\xb4 \xc3\x91'
 b'\xc2\x80\xc3\x91\xc2\x83\xc3\x90\xc2\xb1\xc3\x90\xc2\xbb\xc3\x90'
 b'\xc2\xb5\xc3\x90\xc2\xb9",Unknown,Russian,1/19/2017 13:07,1/19/2017 13:07,'
 b'6311,6313,1806,,Russian,0,0,NonEnglish\r\n')

因此,当解码为UTF-8时,content值变为:

代码语言:javascript
复制
('Ð\x9fÑ\x80иÑ\x87ина #67 Ð\x9cÑ\x83Ñ\x82ко: '
 '«Ð\x97ениÑ\x82-Ð\x90Ñ\x80ене» длÑ\x8f адапÑ\x82аÑ\x86ии к '
 'ЧÐ\x9c поÑ\x82Ñ\x80ебÑ\x83еÑ\x82Ñ\x81Ñ\x8f 1,5â\x80\x932 млÑ\x80д '
 'Ñ\x80Ñ\x83блей')

,它打印为

代码语言:javascript
复制
ÐÑиÑина #67 ÐÑÑко: «ÐениÑ-ÐÑене» Ð´Ð»Ñ Ð°Ð´Ð°Ð¿ÑаÑии к ЧРпоÑÑебÑеÑÑÑ 1,5â2 млÑд ÑÑблей
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-01 03:15:09

注意:数据集has now been fixed,不再需要转换。下面的答案不再适用。

数据集包含Mojibake data,即已编码两次的数据。首先转换为UTF-8,然后作为字节处理,然后再次编码为UTF-8。

您可以通过以下方式修复此问题:首先对拉丁文1进行编码,以将Unicode文本中的UTF-8码点映射回字节,然后再次解码为UTF-8:

代码语言:javascript
复制
content.encode('latin1').decode('utf8')

演示:

代码语言:javascript
复制
>>> content.encode('latin1').decode('utf8')
'Причина #67 Мутко: «Зенит-Арене» для адаптации к ЧМ потребуется 1,5–2 млрд рублей'
>>> print(content.encode('latin1').decode('utf8'))
Причина #67 Мутко: «Зенит-Арене» для адаптации к ЧМ потребуется 1,5–2 млрд рублей

您可以将此转换应用于Pandas数据帧中的整个列:

代码语言:javascript
复制
df.content = df.content.str.encode('latin1').str.decode('utf8')

演示:

代码语言:javascript
复制
>>> import pandas as pd
>>> df = pd.read_csv('https://raw.githubusercontent.com/fivethirtyeight/russian-troll-tweets/master/IRAhandle_tweets_1.csv', encoding='utf8')
>>> df.iloc[372].content
'Ð\x9fÑ\x80иÑ\x87ина #67 Ð\x9cÑ\x83Ñ\x82ко: «Ð\x97ениÑ\x82-Ð\x90Ñ\x80ене» длÑ\x8f адапÑ\x82аÑ\x86ии к ЧÐ\x9c поÑ\x82Ñ\x80ебÑ\x83еÑ\x82Ñ\x81Ñ\x8f 1,5â\x80\x932 млÑ\x80д Ñ\x80Ñ\x83блей'
>>> df.content = df.content.str.encode('latin1').str.decode('utf8')
>>> df.iloc[372].content
'Причина #67 Мутко: «Зенит-Арене» для адаптации к ЧМ потребуется 1,5–2 млрд рублей'

我有filed an issue with the project有固定的编码。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51620367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档