преобразование rpy2 в pandas DataFrame возвращает numpy recarray вместо pandas - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь преобразовать фрейм данных R в python, используя rpy2

with localconverter(ro.default_converter + pandas2ri.converter):
                smogned = ro.conversion.rpy2py(smogned)
print('after pandas2ri')            
print(type(smogned))
print(smogned.shape)
print(smogned.dtype)

, что дает мне следующее

after pandas2ri
<class 'numpy.recarray'>
(7412,)
(numpy.record, [('WS', '<f8'), ('WS_1', '<f8'), ('WS_2', '<f8'), ('WS_3', '<f8'), ('WS_4', '<f8'), ('WS_5', '<f8'), ('RH', '<f8'), ('RH_1', '<f8'), ('RH_2', '<f8'), ('RH_3', '<f8'), ('RH_4', '<f8'), ('RH_5', '<f8'), ('TA', '<f8'), ('TA_1', '<f8'), ('TA_2', '<f8'), ('TA_3', '<f8'), ('TA_4', '<f8'), ('TA_5', '<f8'), ('gridMET_ETr', '<f8'), ('Site_Id_1', '<f8'), ('Site_Id_2', '<f8'), ('Site_Id_3', '<f8'), ('Site_Id_4', '<f8'), ('Site_Id_5', '<f8'), ('Site_Id_6', '<f8'), ('Vegetation_1', '<f8'), ('Vegetation_2', '<f8'), ('Vegetation_3', '<f8'), ('Month_1', '<f8'), ('Month_2', '<f8'), ('Month_3', '<f8'), ('Month_4', '<f8'), ('LE_bowen_corr_mm_', '<f8')])

Также важно отметить, что мои данные имеют 33 столбца, в то время как возвращенный имеет форму (7412,). Что я должен сделать, чтобы сделать это pandas фрейм данных ?? Кроме того, я sh может напрямую возвращать фрейм данных как pandas, потому что я не хочу в конечном итоге преобразовывать массив данных в массив numpy и массив numpy в pandas, потому что когда вы делаете

pd.DataFrame(data=yourdata, columns=[...]) 

Вы должны указать столбцы в том же порядке. Мне возвращены столбцы данных smogned, и я не могу сейчас это контролировать

Информация

  • numpy версия 1.16.4
  • pandas версия 0.20.3
  • rpy2 версия 3.2.6

1 Ответ

0 голосов
/ 10 марта 2020

Благодаря @hpaulj я исправил это, преобразовав 'recarray' в pandas DataFrame явно:

smogned = pd.DataFrame(smogned)

Хотя для меня все еще странно, почему он возвращает recarray

...