Начните с передачи соответствующих параметров для этого случая:
- sep = '[|,]' - есть два разделителя: a pipe char и запятая , поэтому определите их как регулярное выражение .
- skipinitialspace = True - ваш исходный текст содержит дополнительныепробелы (после разделителей), поэтому вы должны отбросить их.
- engine = 'python' - чтобы подавить предупреждение о Откат к движку 'python' .
Только указанные выше параметры позволяют без ошибок вызвать read_csv , но недостатком (на данный момент) является то, что остаются двойные кавычки.
Чтобы устранить их,по крайней мере из строк данных необходим еще один прием:
Определите функцию конвертера (лямбда-выражения):
cnv = lambda txt: txt.replace('"', '')
и примените ее ко всем исходным столбцам.
Inв вашем случае у вас есть 5 столбцов, поэтому для краткости кода вы можете использовать словарь :
{ i: cnv for i in range(5) }
Таким образом, весь код может быть:
df = pd.read_csv(io.StringIO(txt), sep='[|,]', skipinitialspace=True,
engine='python', converters={ i: cnv for i in range(5) })
и результат:
"column1" "column2" "column3" "column4" "column5"
0 123 sometext this somedata 8 inches hello
Но помните, что теперь все столбцы имеют тип string , поэтому вам необходимо преобразовать необходимые столбцы в числа. Альтернатива - передать второй преобразователь для числовых столбцов, возвращая число вместо строки.
Чтобы иметь правильные имена столбцов (без двойных кавычек), вы можете передать дополнительные параметры:
- skiprows = 1 - чтобы пропустить начальную строку,
- names = ["column1", "column2", "column3", "column4", "column5"] - определить список столбцов самостоятельно.