读取ASCII编码的CSV文件时出错?

时间:2019-03-16 05:03:51

标签: python-3.x pandas csv encoding ascii

我有一个名为Qid-NamedEntityMapping.csv的csv文件,其数据如下:

Q1000070    b'Myron V. George'
Q1000296    b'Fred (footballer, born 1979)'
Q1000799    b'Herbert Greenfield'
Q1000841    b'Stephen A. Northway'
Q1001203    b'Buddy Greco'
Q100122     b'Kurt Kreuger'
Q1001240    b'Buddy Lester'
Q1001867    b'Fyodor Stravinsky'

第二列是'ascii'编码的,当我使用以下代码读取文件时,也无法正确读取该文件:

import chardet
import pandas as pd

def find_encoding(fname):
    r_file = open(fname, 'rb').read()
    result = chardet.detect(r_file)
    charenc = result['encoding']
    return charenc


my_encoding = find_encoding('datasets/KGfacts/Qid- 
NamedEntityMapping.csv')
df = pd.read_csv('datasets/KGfacts/Qid- 
NamedEntityMapping.csv',error_bad_lines=False, encoding=my_encoding)

但是输出看起来像这样: output

此外,我尝试使用encoding ='UTF-8'。但是输出仍然是相同的。 如何正确阅读它?

2 个答案:

答案 0 :(得分:0)

您的问题看起来CSV实际上是制表符分隔的;因此您需要在sep='\t'函数中使用read_csv。它会将其他所有内容作为一个单独的列读取,除了第一行中的“ 1979年出生”外,因为这是唯一带有逗号的单元格。

答案 1 :(得分:0)

看起来您的TSV文件保存不正确。避开TAB问题(如我的评论所建议)后,可以将带有名称的列转换为更合适的表示形式。

我们假设数据帧的第二列称为“名称”。 b'XXX'可能是字符串的字节[mis]表示。使用bytes将其转换为ast.literal_eval对象,然后解码为字符串:

import ast
df["names"].apply(ast.literal_eval).apply(bytes.decode)
#0    Myron...
#1    Fred...

最后但并非最不重要的一点是,您的问题几乎与编码或字符集无关。