Несовместимый тип dtype в фрейме данных

Я разрабатываю приложение Python и работаю с фреймом данных pandas. К сожалению, у меня есть предупреждение:

«Установка элемента несовместимого типа d устарела и вызовет ошибка в будущей версии pandas. Значение '[149,7 149,7 149,7 149,7]' имеет dtype, несовместимый с float64, пожалуйста, явно приведите его к сначала совместимый dtype. df1.loc[tmp_idx_start:tmp_idx_start+tmp_idx-1, 'AuM'] = (feesPrefinancing.loc[:tmp_idx-1, 'Комиссионные'] + сборыMobiDeferred.loc[:tmp_idx-1, 'Комиссии'] + сборыLTQDeferred.loc[:tmp_idx-1, 'Комиссионные']).values ​​"

И вот мой код:

df1['Date'] = pd.to_datetime(pd.date_range(simulationDate, end=feesLTQDeferred['Valuation date'].iloc[-1], freq='MS', inclusive='both').date)

df1['AuM'] = 0. 
df1.loc[4:7, 'AuM'] = (feesPrefinancing.loc[:3, 'Fees'] + feesMobiDeferred.loc[:3, 'Fees'] + feesLTQDeferred.loc[:3, 'Fees']).values
df1.loc[8:, 'AuM'] = (annuities['Invested annuity'].values + feesPrefinancing.loc[4:, 'Fees'].values + feesMobiDeferred.loc[4:, 'Fees'].values + feesLTQDeferred.loc[4:, 'Fees'].values)

Как вы можете догадаться, у меня есть фрейм данных, в котором первые столбцы представляют собой даты, а второй должен содержать число с плавающей запятой. Вот почему я инициализировал этот столбец значением «0». значение (это также то, что я читал в другом сообщении, чтобы решить эту ошибку). К сожалению, это предупреждение не исчезнет, ​​даже если строки будут содержать некоторые «astype» и тому подобные вещи.

Вот полученный результат, который правильный, но у меня есть предупреждение:

         Date         AuM
0  2023-01-01    0.000000
1  2023-02-01    0.000000
2  2023-03-01    0.000000
3  2023-04-01    0.000000
4  2023-05-01    0.000000
5  2023-06-01    0.000000
6  2023-07-01    0.000000
7  2023-08-01    0.000000
8  2023-09-01  149.700000
9  2023-10-01  149.700000
10 2023-11-01  149.700000
11 2023-12-01  149.700000
12 2024-01-01 2475.800000
13 2024-02-01 2475.800000
14 2024-03-01 2475.800000
15 2024-04-01 2475.800000
16 2024-05-01 2475.800000
17 2024-06-01 2475.800000
18 2024-07-01 2475.800000
19 2024-08-01 2475.800000

У вас есть идеи, как это решить?

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

Nick 19.04.2024 09:23
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
185
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы назначаете типы данных, которые не являются строго плавающими, для AuM, который устанавливается как плавающий при инициализации с помощью 0..

Присвойте правильный тип данных AuM:

import numpy as np
import pandas as pd
df1['Date'] = pd.to_datetime(pd.date_range(simulationDate, end=fees:TQDeferred['Valuation date'].iloc[-1], freq='MS', inclusive='both').date)
df1['AuM'] = 0.0
df1.loc[4:7, 'AuM'] = (feesPrefinancing.loc[:3, 'Fees'] + feesMoboDeferred.loc[:3, 'Fees'] + feesLTQDeferred.loc[:3, 'Fees']).astype(np.float64).values
df1.loc[8:, 'AuM'] = (annuities['Invested annuity'] + feesPrefinancing.loc[4:, 'Fees'] + feesMobiDeferred.loc[4:, 'Fees'] + feesLTQDeferred.loc[4:, 'Fees']).astype(np.float64).values
  1. Проверьте типы данных столбцов, участвующих в расчете, и убедитесь, что все они числовые.
  2. Убедитесь, что все они согласованы float64

Круто, это работает, но у меня есть еще один вопрос: можно ли этого избежать, инициализируя столбец по-другому?

A.Patrick 19.04.2024 09:34

Ага. В большинстве практических случаев вы не только можете, но и должны указывать тип данных, чтобы избежать подобных проблем. Например: df1['AuM'] = pd.Series(dtype=np.float64)

Laszlo Hunyadi 19.04.2024 09:52

Хорошо, да, я думаю, но, например, если я попытаюсь инициализировать тип с помощью написанной вами строки, но удалю astype(np.float64), у меня все равно появится предупреждение. Единственный способ, которым я нашел, чтобы избежать предупреждения без astype, - это сначала написать две строки, которые устанавливают значения индекса от 4 до 7 и 8 до конца, а затем установить 4 первых значения на ноль. Но я не понимаю, почему

A.Patrick 19.04.2024 10:01

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