Я разрабатываю приложение 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
У вас есть идеи, как это решить?






Вы назначаете типы данных, которые не являются строго плавающими, для 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
float64Круто, это работает, но у меня есть еще один вопрос: можно ли этого избежать, инициализируя столбец по-другому?
Ага. В большинстве практических случаев вы не только можете, но и должны указывать тип данных, чтобы избежать подобных проблем. Например: df1['AuM'] = pd.Series(dtype=np.float64)
Хорошо, да, я думаю, но, например, если я попытаюсь инициализировать тип с помощью написанной вами строки, но удалю astype(np.float64), у меня все равно появится предупреждение. Единственный способ, которым я нашел, чтобы избежать предупреждения без astype, - это сначала написать две строки, которые устанавливают значения индекса от 4 до 7 и 8 до конца, а затем установить 4 первых значения на ноль. Но я не понимаю, почему
Пожалуйста, прочитайте минимальный воспроизводимый пример и отредактируйте свой вопрос, используя образцы данных, демонстрирующие проблему.