В Pandas DataFrame я читаю CSV-файл, который выглядит следующим образом:
A B
+--------------+---------------+
0 | | ("t1", "t2") |
+--------------+---------------+
1 | ("t3", "t4") | |
+--------------+---------------+
Две ячейки имеют буквальные кортежи, а две пустые.
df = pd.read_csv(my_file.csv, dtype=str, delimiter=',',
converters={'A': ast.literal_eval, 'B': ast.literal_eval})
Преобразователь ast.literal_eval
прекрасно работает для преобразования буквальных кортежей в объекты кортежей Python внутри кода - но только до тех пор, пока нет пустых ячеек. Поскольку у меня есть пустые ячейки, я получаю ошибку:
SyntaxError: неожиданный EOF при разборе
Согласно этому ответу S / O , я должен попытаться отловить исключение SyntaxError для пустых строк:
ast использует compile для компиляции исходной строки (которая должна быть
выражение) в АСТ. Если исходная строка недопустима
выражение (как пустая строка), ошибка синтаксиса будет вызвана
компилировать.
Однако я не уверен, как отлавливать исключения для отдельных ячеек в контексте read_csv
converters
.
Как лучше всего это сделать? В противном случае есть какой-нибудь способ преобразовать пустые строки / ячейки в объекты, которые literal_eval
будет принимать или игнорировать?
NB. Насколько я понимаю, наличие буквальных кортежей в читаемых файлах - не всегда лучшая вещь, но в моем случае это полезно.