Ошибка при чтении CSV-файла в кодировке ascii? - PullRequest
0 голосов
/ 16 марта 2019

У меня есть CSV-файл с именем Qid-NamedEntityMapping.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

Также я попытался использовать кодировку = 'UTF-8'.но, тем не менее, вывод остается прежним.Что можно сделать, чтобы правильно его прочитать?

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Похоже, у вас неправильно сохранен файл TSV. Как только вы обойдете проблему TAB (как предложено в моем комментарии), вы можете преобразовать столбец с именами в более подходящее представление.

Предположим, что второй столбец кадра данных называется «имена». b'XXX', вероятно, является байтовым [mis] представлением строки. Преобразуйте его в bytes объект с ast.literal_eval и затем декодируйте в строку:

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

И последнее, но не менее важное: ваша проблема почти не связана с кодировками или кодировками.

0 голосов
/ 16 марта 2019

Ваша проблема выглядит так, будто CSV на самом деле разделен табуляцией;поэтому вам нужно иметь sep='\t' в функции read_csv.Он читает все остальное как один столбец, за исключением слова «родился в 1979 году» в первом ряду, поскольку это единственная ячейка с запятой.

...