我有一个名为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)
但是输出看起来像这样:
此外,我尝试使用encoding ='UTF-8'。但是输出仍然是相同的。 如何正确阅读它?
答案 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...
最后但并非最不重要的一点是,您的问题几乎与编码或字符集无关。