Конвертировать Julia Dataframe в Python Pandas фрейм данных - PullRequest
4 голосов
/ 05 марта 2020

Я пытаюсь преобразовать объект PyCall.jlwrap ('Julia') в Pandas фрейм данных. Я использую PyJulia для запуска алгоритма оптимизации в Julia, который в результате выдает объект dataframe. Я хотел бы преобразовать этот объект в Pandas фрейм данных.

Это аналогичный вопрос, заданный 5 лет go здесь . Тем не менее, нет никакого кода, чтобы предложить, как выполнить sh передачу.

Любая помощь будет полезна!

Вот код, который я сейчас настроил. Не очень полезно знать, что происходит на фоне моей «optim_program», но просто знать, что то, что возвращается командами «run_hybrid» и «run_storage», возвращает фрейм данных:

### load in necessary modules for pyjulia    
from julia import Main as jl 

##load my user defined module
jl.include("optimization_program_v3.jl")

##run function from module
results = jl.run_hybrid(generic_inputs)

##test type of item returned
jl.typeof(results)
returns: <PyCall.jlwrap DataFrame>

##try to convert to pandas
test = pd.DataFrame(results)

Значение Ошибка трассировки (последний вызов был последним)

in ()

----> 1 test = pd.DataFrame (результаты)

in init (self, data, index, column, dtype, copy)

420 dtype = values.dtype, copy = False) 421 else: 422 повысить ValueError ('Конструктор DataFrame неправильно вызван!')

423

424 NDFrame. init (self, mgr, fastpath = True)

ValueError: Конструктор DataFrame неправильно вызван!

1 Ответ

6 голосов
/ 05 марта 2020

Я получаю сообщение об ошибке (при чтении Julia DataFrame в Python), если я использую пакет DataFrames.jl . Тем не менее, похоже, что он хорошо работает с пакетом Pandas .jl :

>>> from julia import Main as jl
>>> import pandas as pd
>>> jl.eval('using Pandas')
>>> res = jl.eval('DataFrame(Dict(:age=>[27, 29, 27], :name=>["James", "Jill", "Jake"]))')
>>> jl.typeof(res)
#<PyCall.jlwrap PyObject>
>>> df = pd.DataFrame(res)
>>> df
    age   name
0   27  James
1   29   Jill
2   27   Jake

Это было протестировано на Win10 с Python 3.8.2 и Julia 1.3.1

...