我已经使用tweepy使用Python csv.writer()将推文的文本存储在csv文件中,但是在存储之前我不得不在utf-8中对文本进行编码,否则tweepy会引发奇怪的错误。
将熊猫作为pd导入
data = pd.read_csv('C:\ Users \ Lenovo \ Desktop \ _Carabinieri_10_tweets.csv',delimiter =“,”,encoding =“ utf-8”)
data.head()
print(data.head())
现在,文本数据存储如下:
输出
id…text
0 1228280254256623616…b'RT @MinisteroDifesa:#14febbraio Il Ministro…
1 1228257366841405441…b'\ xe2 \ x80 \ x9cNon t \ xe2 \ x80 \ x99ama chi amor ti ...
2 1228235394954620928…b'Eseguite dai #Carabinieri del Nucleo Investi…
3 1228219588589965316…b'Il pianeta brucia \ nConosci il黑碳?...
4 1228020579485261824…b'RT @Coninews:三色Emozioni \ xe2 \ x9c \ xa…
尽管我使用“ utf-8”通过以下代码将文件读取到DataFrame中,但输出中的字符看起来却大不相同。输出看起来像字节。语言是意大利语。
我尝试使用此代码对此进行解码(其他列中有更多数据,第二列中有文本)。但是,它不会解码文本。我无法使用.decode('utf-8'),因为csv阅读器将数据读取为字符串,即type(row [2])为'str',而且我似乎无法将其转换为字节,数据又被编码了!
如何解码文本数据?
如果您能提供帮助,我将非常高兴,谢谢。
答案 0 :(得分:1)
问题可能来自您编写csv文件的方式。我敢打赌,当以文本形式阅读(使用简单的文本编辑器(如记事本,notepad ++或vi))时,硬币实际上包含:
1228280254256623616,…,b'RT @MinisteroDifesa: #14febbraio Il Ministro...'
1228257366841405441,…,b'\xe2\x80\x9cNon t\xe2\x80\x99ama chi amor ti...'
...
或:
1228280254256623616,…,"b'RT @MinisteroDifesa: #14febbraio Il Ministro...'"
1228257366841405441,…,"b'\xe2\x80\x9cNon t\xe2\x80\x99ama chi amor ti...'"
...
Pandas read_csv然后正确读取字节字符串的文本表示形式。
正确的解决方法是编写真正的UTF-8编码的字符串,但是由于我不知道代码,所以我无法提出修复程序。
一种可能的解决方法是使用ast.literal_eval
将文本表示形式转换为字节字符串并对其进行解码:
df['text'] = df['text'].apply(lambda x: ast.literal_eval(x).decode('utf8'))
它应该给出:
id ... text
0 1228280254256623616 ... RT @MinisteroDifesa: #14febbraio Il Ministro...
1 1228257366841405441 ... “Non t’ama chi amor ti...
...