Чтение csv файла с разделениями запятыми, при том, что в файле присутствуют нежелательные запятые
столкнулся со следующей проблемой: при чтении csv-файла в виде таблицы дефолтно разделителем считаются запятые, однако в моем файле присутствуют дополнительные запятые, которые мешают правильно разделить объекты. в каждой строке читаемой таблицы присутствует 7 объектов, но на шестом чаще всего имеется запятая (для примера - пусть в таблице содержатся название фильма, ссылка на него и жанр. С названием и ссылкой все в порядке, но жанров чаще всего дается несколько, вроде драма,комедия,боевик. в данном случае на третьем объекта имеются запятые, которые мешают правильному разделению). В целом, мне можно просто вытащить первые 4 объекта, а остальные, включаю жанры, просто не считывать. Подскажите, пожалуйста, как это сделать.
Ответы (1 шт):
Если "лишние" поля можно просто отбросить, то используйте параметр usecols=. Пример:
import pandas as pd
with open("test.csv", "w") as f:
f.writelines(['1,2,3,4,5\n','1,2,3,4\n','1,2,3,4,5,6\n','1,2,3\n'])
df = pd.read_csv("test.csv", sep=',', usecols=[0,1,2])
df
Вывод:
1 2 3
0 1 2 3
1 1 2 3
2 1 2 3
Как видите, "лишние" поля просто обрезались как в шапке, так и в теле таблицы.
Другой вариант обойти проблему - добавить в первую строку файла с названиями колонок заведомо большое число запятых, чтобы в таблице такого точно не было, тогда тоже файл считается без ошибок:
import pandas as pd
with open("test.csv", "w") as f:
f.writelines(['1,2,3,,,,,,,\n','1,2,3,4\n','1,2,3,4,5,6\n','1,2,3\n'])
df = pd.read_csv("test.csv", sep=',')
df
Вывод:
1 2 3 Unnamed: 3 Unnamed: 4 Unnamed: 5 Unnamed: 6 Unnamed: 7 Unnamed: 8 Unnamed: 9
0 1 2 3 4.0 NaN NaN NaN NaN NaN NaN
1 1 2 3 4.0 5.0 6.0 NaN NaN NaN NaN
2 1 2 3 NaN NaN NaN NaN NaN NaN NaN
Но самое правильное решение - считать и перезаписать csv файл, применив какое-нибудь "экранирование" перед "лишними" запятыми, код мне пока не хочется писать.