Я пытаюсь преобразовать столбец типа объекта в float. Не работает

#python #thomson-reuters-eikon #refinitiv-eikon-api

#python #thomson-reuters-eikon #уточнение-eikon-api

Вопрос:

 TSRdfr["Return"] = pd.to_numeric(TSRdfr.Return, errors='coerce')
  

Это не преобразование типа данных Return из Object в float64 . Я попытался удалить errors ='coerce' , чтобы посмотреть, что происходит.

Я получаю сообщение об ошибке:

Невозможно проанализировать NaN в позиции 0

когда я не использую errors = 'coerce' .

Доступ к возвращаемым номерам осуществляется из API Refinitiv Eikon. Я предполагаю, что они слишком велики для преобразования в float64 . Есть предложения??

Комментарии:

1. Не могли бы вы предоставить больше информации о TSRdfr ? Каково его содержимое?

2. @bubble У меня есть фрейм данных TSRdfr, к которому я получил доступ из Eikon API на Python. Общий возврат индексного инструмента 1. RIO.L. 15.990065 2. AAP.A. 22.543209 и так далее ….

3. Общий возврат имеет тип Object

4. У меня есть фрейм данных TSRdfr, к которому я получил доступ из Eikon API на Python. Общий возврат индексного инструмента 1. RIO.L. 15.990065 2. AAP.A. 22.543209 и так далее …. Тип данных Total Return — это Object, который мне нужно преобразовать в float64. Я использую приведенный ниже синтаксис. TSRdfr[«Общий возврат»] = pd.to_numeric(TSRdfr[«Общий возврат»], ошибки = ‘принудительный’)

Ответ №1:

Попробуйте следующее:

 import pandas as pd
import re
repat = re.compile('d (?:.d )?')

# sample data frame 
df = pd.DataFrame({'Return': ['some data 123.123', 'tick 0.12']})

df.loc[:, 'Converted'] = df.Return.apply(lambda x: float(repat.findall(x)[0]))
  

Надеюсь, это поможет

Комментарии:

1. импортировать повторно repat = повторно.compile(‘ d (?:. d )?’) TSR_df_06_09.loc[:, ‘Converted’] = TSR_df_06_09.Return.apply(лямбда x: float(repat.findall(x)[0]))

2. Ошибка атрибута: объект ‘DataFrame’ не имеет атрибута ‘Return’

3. Это означает, что у TSR_df_06_09 столбца нет имени Return . Назовите имена столбцов TSR_df_06_09 ; распечатайте TSR_df_06_09.columns , чтобы увидеть все столбцы фрейма данных.

Ответ №2:

Если ваше число слишком велико, вы можете использовать десятичную библиотеку

 import decimal
decimal.getcontext().prec = 100
df[col] = df[col].map(lambda x: decimal.Decimal(x))
  

Комментарии:

1. импортируйте decimal decimal.getcontext().prec = 100 TSR_df_06_09[‘Total Return’] = pd.to_numeric(TSR_df_06_09[‘Total Return’].map(лямбда x: десятичный. Десятичный (x)))

2. Попробовал приведенный выше код.. получаю эту ошибку: недействительная операция: [ ConversionSyntax’>]