Использование PyYAML для создания объектов pandas DataFrame - превышена глубина рекурсии

Я пытаюсь разрешить определение объектов pandas DataFrame в файле YAML, я считаю, что это должно быть возможно, потому что объекты DataFrame доступен для обработки.

Мой урезанный файл YAML, сохраненный как «config.yaml», выглядит следующим образом:

!!python/object/new:pandas.DataFrame [[{'dimension1_id':58,'metric1':10},{'dimension1_id':50,'metric':10}]]

И я использую следующее для загрузки данных в мой скрипт Python.

f = open('config.yaml')
y = yaml.load(f)
print y

Выход (уменьшенный) выглядит следующим образом:

File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 2085, in __getattr__
if name in self.columns:
File "properties.pyx", line 55, in pandas.lib.AxisProperty.__get__ (pandas\lib.c:29240)
RuntimeError: maximum recursion depth exceeded while calling a Python object

Я использую документацию PyYAML как единственный источник информации по этому вопросу.

Кто-нибудь может догадаться, почему pandas попадает в бесконечный цикл?

РЕДАКТИРОВАТЬ: похоже, что объекты DataFrames не сериализуются по умолчанию, и дополнительная работа с ногами выглядит больше проблем, чем она того стоит. Вот файл YAML, созданный yaml_serializer из простого объекта DataFrame:

!!python/object/new:pandas.core.frame.DataFrame
state: !!python/object/new:pandas.core.internals.BlockManager
  state:
  - - !!python/object/apply:numpy.core.multiarray._reconstruct
      args:
      - &id001 !!python/name:pandas.core.index.Index ''
      - [0]
      - b
      state:
      - - 1
        - [!!python/long '2']
        - &id002 !dtype 'object'
        - false
        - [dfsd, id]
      - [null]
    - !!python/object/apply:numpy.core.multiarray._reconstruct
      args:
      - !!python/name:pandas.core.index.Int64Index ''
      - [0]
      - b
      state:
      - - 1
        - [!!python/long '2']
        - !dtype 'int64'
        - false
        - "\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0"
      - [null]
  - - - [!!python/long '23', !!python/long '123']
      - [!!python/long '7', !!python/long '123']
  - - !!python/object/apply:numpy.core.multiarray._reconstruct
      args:
      - *id001
      - [0]
      - b
      state:
      - - 1
        - [!!python/long '2']
        - *id002
        - false
        - [dfsd, id]
      - [null]

person user3111502    schedule 17.12.2013    source источник


Ответы (1)


Я не думаю, что DataFrames можно выбрать "из коробки"... to_pickle выполняет некоторые специфичные для панд споры, которые другие модули пропустили бы. Другие здесь знают больше об этом.

Но мне удалось сохранить Series в yaml с помощью этого небольшого модуля. Выполнение этого с DataFrames также должно быть возможным, поскольку их можно рассматривать как дикты Series.

person Dan Allan    schedule 17.12.2013