У меня есть электронная таблица со статистикой Мирового счастья за 2019 год, которая будет позже использована в задаче визуализации и линейной регрессии (это групповой проект, и моя часть заключается в очистке данных, чтобы иметь как можно меньше нулевых значений). насколько это возможно).
Меня интересуют только годы, в том числе и после 2010 года. Данные по некоторым странам полностью отсутствуют за определенный год (например, в Эфиопии отсутствуют данные за 2010 и 2011 годы). Я хотел бы предсказать недостающие параметры этих стран (такие как показатель жизни и логарифм ВВП на душу населения) путем интерполяции.
Файл можно найти здесь: https://s3.amazonaws.com/happiness-report/2019/Chapter2OnlineData.xls
То, что я делал до сих пор, - это создание нового DataFrame для каждой страны и попытка интерполяции для этой страны. (Код ниже.) Обратите внимание, что dropdata - это DataFrame, который я создал, удаляя страны, для которых слишком мало информации, например, Оман.
Кроме того, я вручную вставил строки в исходную электронную таблицу со страной и годом (например, Эфиопия, 2011) и пустыми значениями данных.
Но интерполяция не работает вообще. Я продолжаю видеть значения NaN, и при печати DataFrame новые вставленные строки не отображаются вообще.
Ниже приведен пример вывода.
Country name Year Life Ladder Log GDP per capita Social support \
Ethiopia 2012 4.561169 7.115237 0.658794
Ethiopia 2013 4.444827 7.189737 0.602482
Ethiopia 2014 4.506647 7.261595 0.640452
Ethiopia 2015 4.573155 7.335052 0.625597
Ethiopia 2016 4.297849 7.382929 0.718719
Ethiopia 2017 4.180315 7.455834 0.733540
Ethiopia 2018 4.379262 7.524517 0.740155
Healthy life expectancy at birth Freedom to make life choices \
55.200001 0.776308
55.799999 0.706796
56.400002 0.693559
57.000000 0.802643
57.500000 0.744308
58.000000 0.717101
58.500000 0.740343
Generosity Perceptions of corruption
-0.036612 NaN
-0.000997 0.750478
0.086612 0.701800
0.118702 0.567027
0.045363 0.702881
0.007519 0.756899
0.043274 0.799466
И код, который я использовал.
country_list = dropdata['Country name']
for country in country_list:
countryDF = dropdata.loc[dropdata['Country name'] == country, :] #Creates a dataFrame for each country.
countryDF2 = countryDF.iloc[0:20, 0:9] #We are interested only in the first 9 rows.
countryDF2.interpolate(method ='values', axis = 0, limit_direction ='both', limit = 3)
Все еще есть значения NaN, несмотря на то, что выполнили интерполяцию в обоих направлениях. Более того, я должен скопировать интерполированные значения из DataFrame каждой страны обратно в исходный DataFrame (который должен быть взят как dropdata) для всех строк. С чего начать?