r reticulate: переименовывать дубликаты из преобразованного кадра данных Python pandas

Я использую великолепный новый пакет r "сетчатый" для объединения Python и R, чтобы иметь возможность использовать API от поставщика данных (Thomson Reuters Eikon) в R, который доступен только для Python. Я хочу сделать это, так как мои способности R лучше, чем мои (почти несуществующие) способности Python.

Я использую функцию "get_news_headlines" из модуля Python "eikon", которая служит в качестве API для загрузки данных из Thomson Reuters Eikon. Я автоматически преобразовываю результирующий кадр данных pandas в r-кадр данных, устанавливая аргумент "convert" функции сетчатки "import" в TRUE.

API устанавливает в качестве индекса первый столбец загруженных данных, содержащий даты публикации новостей. Когда датафрейм автоматически преобразуется в объект r, в датах появляются дубликаты, и я получаю следующее сообщение об ошибке:

Error in `row.names<-.data.frame`(`*tmp*`, value = value) : 
duplicate 'row.names' are not allowed
In addition: Warning message:
non-unique value when setting 'row.names': ‘2018-05-31 08:21:56’ 

Вот мой код:

library(reticulate) #load reticulate package to combine Python with R

PYTHON_pandas <- import("pandas", convert = TRUE)
#import Python pandas via reticulate's function "import"
PYTHON_eikon <- import("eikon", convert = TRUE)
#import the Thomson Reuters API Python module for use of the API in R
#(I set convert to true to convert Python objects into their R equivalents)

#do not bother with the following line:
PYTHON_eikon$set_app_id('ADD EIKON APP ID HERE')
#set a Thomson Reuters application ID (step is necessary to download data from TR, any string works)

DF <- PYTHON_eikon$get_news_headlines(query = 'Topic:REAM AND Topic:US', count = 10L)
#save news data from the API in an R dataframe
#query is the Thomson Reuters code from their Eikon database
#count is the number of news articles to be downloaded, I arbitrarily set it to 10 articles here

Поэтому моя проблема в том, что я должен сказать R заменить дубликаты из индекса pandas до того, как произойдет преобразование в r-фрейм данных, чтобы избежать указанного сообщения об ошибке. Когда я устанавливаю количество аргументов на небольшое число и по совпадению не имею дубликатов, код работает отлично, как и сейчас.

Это, вероятно, легко для людей с некоторыми знаниями как в R, так и в Python (поэтому не для меня, так как мои знания Python очень ограничены). К сожалению, код не тиражируется, так как я хочу использовать доступ к данным Thomson Reuters. Любая помощь высоко ценится!

РЕДАКТИРОВАТЬ: Возможно, будет возможность установить аргумент convert = FALSE в import функция для получения данных Prades в R сначала? Тогда мне потребовалась бы возможность манипулировать информационным фреймом pandas Python в R, чтобы удалить дубликаты или, в качестве альтернативы, удалить индексный фрейм pandas, прежде чем я вручную преобразую фрейм данных pandas в R-фрейм данных. Это возможно с reticulate?

Документация к пакету eikon Python пока не очень хороша, так как это довольно новый модуль Python.

@Moody_Mudskipper:

str(PYTHON_eikon) только возвращается Module(eikon) так как я только загружаю соответствующий модуль Python с функцией импорта.

names(PYTHON_eikon) возвращает:"data_grid" "eikonError" "EikonError" "get_app_id" "get_data" "get_news_headlines" "get_news_story" "get_port_number" "get_symbology" "get_timeout" "get_timeseries" "json_requests" "news_request" "Profile" "send_json_request" "set_app_id" "set_port_number" "set_timeout" "symbology" "time_series" "tools" "TR_Field"

Кажется, ни одна из доступных функций eikon не помогла мне решить мою проблему.

2 ответа

В случае, если эта довольно специфическая проблема когда-либо будет интересна кому-то еще, я кратко хочу поделиться решением, которое я нашел тем временем (не идеально, но работает):

library(reticulate) #load reticulate package to combine Python with R

PYTHON_pandas <- import("pandas", convert = TRUE)
#import Python pandas via reticulate's function "import"
PYTHON_eikon <- import("eikon", convert = TRUE)
#import the Thomson Reuters API Python module for use of the API in R
#(I set convert to true to convert Python objects into their R equivalents)

#do not bother with the following line:
PYTHON_eikon$set_app_id('ADD EIKON APP ID HERE')
#set a Thomson Reuters application ID (step is necessary to download data from TR, any string works)

#**Solution starts HERE:**

DF <- PYTHON_eikon$get_news_headlines(query = 'Topic:REAM AND Topic:US', count = 10L, raw_output = TRUE)
#use argument "raw_output" to receive a list instead of a dataframe

DF[c(2, 3)] <- NULL
#delete unrequired list-elements

DF <- list.cbind(DF)
#use "rlist" function "list.cbind" to column-bind list object "DF"

DF <- rbindlist(DF, fill = FALSE)
#use "data.table" function "rbindlist" to row-bind list object "DF" 

Вам нужно использовать пакет R "reticulate" или вы могли бы посмотреть и на другие пакеты?

На GitHub доступна оболочка с открытым исходным кодом для R: eikonapir. Хотя он официально не поддерживается, вы можете найти его полезным, потому что он может выполнить вашу команду без проблем:

get_news_headlines(query = 'Topic:REAM AND Topic:US', count = 10L)

** Отказ от ответственности: в настоящее время я работаю в Thomson Reuters

Другие вопросы по тегам