Чтение панда данных, который содержит словари в ячейках из CSV - PullRequest
0 голосов
/ 07 июня 2018

Я сохранил кадр данных pandas, который выглядит как файл csv.

    a
0 {'word': 5.7}
1 {'khfds': 8.34}

Когда я пытаюсь прочитать кадр данных, как показано ниже, я получаю следующую ошибку.

df = pd.read_csv('foo.csv', index_col=0, dtype={'str': 'dict'})

TypeError: data type "dict" not understood

Суть моего вопроса в том, как мне прочитать файл csv, чтобы восстановить фрейм данных в той же форме, в которой он был создан.Я также попытался прочитать без dtype = {} , а также , заменив 'dict' альтернативами, такими как 'словарь','object' и 'str'.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Вы также можете использовать простой и простой Python Eval следующим образом:

import pandas as pd
from io import StringIO

mystr = StringIO("""a
{'word': 5.7}
{'khfds': 8.34}""")

df = pd.read_csv(mystr)

df['a'] = df['a'].apply(eval)

print(df['a'].apply(lambda x: type(x)))

0    <class 'dict'>
1    <class 'dict'>
Name: a, dtype: object
0 голосов
/ 07 июня 2018

CSV-файлы могут содержать только текст, поэтому словари находятся вне области видимости.Поэтому вам нужно буквально прочитать текст, чтобы преобразовать в dict.Одним из способов является использование ast.literal_eval:

import pandas as pd
from ast import literal_eval
from io import StringIO

mystr = StringIO("""a
{'word': 5.7}
{'khfds': 8.34}""")

df = pd.read_csv(mystr)

df['a'] = df['a'].apply(literal_eval)

print(df['a'].apply(lambda x: type(x)))

0    <class 'dict'>
1    <class 'dict'>
Name: a, dtype: object

Однако я настоятельно рекомендую вам , а не использовать Pandas специально для хранения указателей на словари.Панды лучше всего работают с непрерывными блоками памяти, например, разделяют числовые данные в числовые ряды.

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