Панды игнорируют разделитель, переданный в качестве параметра - PullRequest
0 голосов
/ 17 апреля 2019

Я работаю над функцией, которая среди других задач должна читать csv в пандах.В качестве одного из параметров я хотел бы передать разделитель в виде строки.Однако по какой-то причине, возможно, что-то связанное с регулярными выражениями, pandas полностью игнорирует мой переданный синтаксический анализатор и по умолчанию принимает значение «\ t», что не корректно анализирует мои данные.

import pandas as pd

def open_df(separator):
  df = pd.read_csv('filename.csv', sep=separator)
  return df

Вопрос в том, как мне передать параметр разделителя в этом случае?

Ответы [ 2 ]

3 голосов
/ 17 апреля 2019

Пожалуйста, проверьте эту ссылку: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

sep: str, по умолчанию ‘,’

Delimiter to use. If sep is None, the C engine cannot automatically detect the separator, but the Python parsing engine can,

означает, что последний будет использоваться и автоматически обнаружит разделитель встроенным анализатором Python, csv.Sniffer. Кроме того, разделители будет длиннее 1 символа и будет отличаться от '\ s +' как регулярные выражения, а также заставит использовать Python парсинг двигателя. Обратите внимание, что разделители регулярных выражений склонны игнорировать приведенные данные. Пример регулярного выражения: '\ r \ t'.

1 голос
/ 17 апреля 2019

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

Когда вы звоните open_df(), вам нужно написать г перед строковыми кавычками, такими как open_df(r"\t")

Пример:

test_string = r"\t\n"
print(test_string)
\t\n

И я также передал "python" в качестве параметра движка, чтобы не отображать предупреждение парсера :-).

...