python pandas read_csv не распознает \ t в файле с разделителями табуляции

Я пытаюсь прочитать в следующей вкладке данные, разделенные на панды:
test.txt:

col_a\tcol_b\tcol_c\tcol_d
4\t3\t2\t1  
4\t3\t2\t1 

Я импортирую test.txt следующим образом:

pd.read_csv('test.txt',sep='\t')

Результирующий фрейм данных имеет 1 столбец. \ T не распознается как вкладка.

Если я заменю \ t «клавиатурной вкладкой», файл будет проанализирован правильно. Я также попытался заменить '\ t на \ t и / t, и мне не повезло.

Заранее благодарим за помощь.
Омар

PS: снимок экрана https://imgur.com/a/nXvW3


person Omar    schedule 01.08.2017    source источник
comment
Приведите воспроизводимый пример. Используя точные данные, которые вы предоставили, и тот же самый код, я получаю фрейм данных с формой (2,4). У вас действительно есть вкладки в вашем CSV? Или он буквально ограничен символами "\t"?   -  person juanpa.arrivillaga    schedule 01.08.2017
comment
Итак, вы просто вставили приведенный выше фрагмент в текстовый файл с именем 'test.txt' и выполнили: import pandas as pd pd.read_csv ('test.txt', sep = '\ t') Возможно, проблема с моим текстовым редактором?   -  person Omar    schedule 01.08.2017
comment
Ваш текстовый редактор действительно показывает символы '\t'? Потому что тогда у вас нет вкладок.   -  person juanpa.arrivillaga    schedule 01.08.2017
comment
Нет, текстовый редактор фактически не отображает \ t как вкладку   -  person Omar    schedule 01.08.2017
comment
Тогда это не вкладки. Если вы хотите поместить в файл вкладки, вы должны использовать кнопку вкладки. \t - это escape-последовательность Python (и многих других языков). Ваш текстовый редактор предполагает, что вы имеете в виду настоящие символы "\", за которыми следует "t"   -  person juanpa.arrivillaga    schedule 01.08.2017
comment
Нет, это не так. Это escape-последовательность. Это сделано для вашего удобства при написании исходного кода, это Python, который интерпретирует его как вкладку. Точно так же в Python [] означает список, но в вашем текстовом редакторе это просто квадратные скобки ...   -  person juanpa.arrivillaga    schedule 01.08.2017
comment
Ах я вижу. Причина, по которой я использовал \ t, потому что я пытался найти и заменить старый разделитель табуляцией. Спасибо!   -  person Omar    schedule 01.08.2017


Ответы (1)


\t в вашем файле - это обратная косая черта, за которой следует t. Это не tab. Вам нужно будет использовать некоторые escape-символы в параметре sep.

pd.read_csv('test.txt', sep=r'\\t', engine='python')

   col_a  col_b  col_c  col_d
0      4      3      2      1
1      4      3      2      1

Or

pd.read_csv('test.txt', sep='\\\\t', engine='python')

   col_a  col_b  col_c  col_d
0      4      3      2      1
1      4      3      2      1

ответ на комментарий

r указывает, что это необработанная строка, и специальные символы должны интерпретироваться как необработанный символ. Вот почему в одном решении я указал, что строка была сырой и имела только две обратные косые черты. В другом случае мне приходилось экранировать каждую обратную косую черту с помощью другой обратной косой черты, оставляя четыре обратной косой черты.

person piRSquared    schedule 01.08.2017
comment
У меня не работает os/x high sierra с python 2.7.3 - person WestCoastProjects; 06.03.2018
comment
в моем случае это работает: pd.read_csv (path, sep = '\\ t', engine = 'python'), без упоминания r перед разделителем (python 3.7 / ipython) - person apet; 20.03.2020