У меня есть датафрейм из Excel, в котором есть несколько NaN в строках. Я хочу заменить строки, все значения которых являются NaN, на другую базовую строку.
Исходный кадр данных выглядит так:
Country Name Years tariff1_1 tariff1_2 tariff1_3
830 Hungary 2004 9.540313 6.287314 13.098201
831 Hungary 2005 9.540789 6.281724 13.124401
832 Hungary 2006 NaN NaN NaN
833 Hungary 2007 NaN NaN NaN
834 eu 2005 8.55 5.7 11.4
835 eu 2006 8.46 5.9 11.6
836 eu 2007 8.56 5.3 11.9
, поэтому, если все тарифы для Венгрии определенного года - это NaN, эту строку следует заменить данными ЕС в соответствии с точным годом.
Идеальный результат:
Country Name Years tariff1_1 tariff1_2 tariff1_3
830 Hungary 2004 9.540313 6.287314 13.098201
831 Hungary 2005 9.540789 6.281724 13.124401
832 Hungary 2006 8.46 5.9 11.6
833 Hungary 2007 8.56 5.3 11.9
834 eu 2005 8.55 5.7 11.4
835 eu 2006 8.46 5.9 11.6
836 eu 2007 8.56 5.3 11.9
Я посмотрел на тип NaN в определенной строке («Hungary», 2006), и он оказался «float64». Так что получается, что ufunc «isnan» не поддерживается для типов ввода, и входные данные не могут быть безопасно принудительно приведены к каким-либо поддерживаемым типам в соответствии с правилом приведения «safe». после того, как я использую np.isnan
.
Итак, я принял math.isnan
. Но кажется, что он не обнаруживает NaN в моей тестовой строке:
test=df.loc[(df['Country Name'] == 'Hungary') & (df['Years']== 2006)]
test.iloc[:,4]
Out[293]:
832 NaN
Name: tariff1_3, dtype: float64
math.isnan(any(test))
Out[294]:False
np.isnan(any(test))
Out[295]:ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
Вот мои оригинальные строки.
Eu=['Austria','Belgium','Curacao','Denmark','Finland','France','Germany']
for country in Eu:
for year in range(2001,2012)
if math.isnan(all(df.loc[(df['Country Name'] == country) & (df['Years'] == year)])):
df.loc[(df['Country Name'] == country) & (df['Years'] == year)]=df.loc[(df['Country Name'] == 'eu') & (df['Years'] == year)]
Спасибо!