Используйте списки Python в качестве dtype - PullRequest
0 голосов
/ 28 июня 2018

загружаю csv файлы вида

fieldA|fieldB|fieldC| 
     X|     Y| 3,4,5|

Я бы хотел, чтобы "3,4,5" загружался пандами в виде списка питонов, он же pandas.read_csv(..., dtypes={"fieldC": list},...)

Прямо сейчас при вызове read_csv я передаю следующий конвертер

def _convert_to_list(x, field="pass a field to debug"):
    return list(map(int, x.split(','))) if (x is not None and x != '') else np.nan

но я нахожусь на этапе, когда я загружаю / сохраняю / перезагружаю эти кадры данных из csv, и эти списки являются источником ошибок. Из-за этого расширения http://pandas.pydata.org/pandas-docs/stable/generated/pandas.api.extensions.ExtensionArray.html#pandas.api.extensions.ExtensionArray я обновил версию для своих панд до 0.23, но я не знаю, что с этим делать. Это полезно для моего варианта использования? любой пример, который я мог бы получить вдохновение?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Я не думаю, что средство ExtensionArray поможет вам с точки зрения ввода / вывода DataFrame, содержащего столбцы, содержащие объекты типа list. В дизайне ExtensionArray нет ничего, что помогло бы с проблемами ввода / вывода.

Примеры ExtensionArray можно найти в подкаталогах decimal и json в каталоге pandas/tests/extension/. Ни один из этих примеров ничего не делает с вводом / выводом.

0 голосов
/ 28 июня 2018

Вы можете использовать ast.literal_eval

https://docs.python.org/3/library/ast.html#ast.literal_eval

ast.literal_eval (node_or_string)

Безопасное вычисление узла выражения или строки, содержащей литералы Python> или отображение контейнера. Предоставленная строка или узел могут состоять только из> следующих литеральных структур Python: строк, байтов, чисел, кортежей,> списков, диктов, множеств, логических значений и None.

Это может быть использовано для безопасной оценки строк, содержащих значения Python> из ненадежных источников, без необходимости разбора значений самостоятельно. Он> не способен вычислять произвольно сложные выражения, например> с использованием операторов или индексации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...