#python #pandas #interpolation #nan #missing-data
#python #pandas #интерполяция #nan #отсутствуют данные
Вопрос:
У меня есть df
:
company year revenues
0 company 1 2019 1,425,000,000
1 company 1 2018 1,576,000,000
2 company 1 2017 1,615,000,000
3 company 1 2016 1,498,000,000
4 company 1 2015 1,569,000,000
5 company 2 2019 nan
6 company 2 2018 1,061,757,075
7 company 2 2017 nan
8 company 2 2016 573,414,893
9 company 2 2015 599,402,347
Я хотел бы fill
nan
получить значения с порядком. Я хочу сначала выполнить линейную интерполяцию, затем прямое заполнение, а затем обратное заполнение. В настоящее время у меня есть:
f_2_impute = [x for x in cl_data.columns if cl_data[x].dtypes != 'O' and 'total' not in x and 'year' not in x]
def ffbf(x):
return x.ffill().bfill()
group_with = ['company']
for x in cl_data[f_2_impute]:
cl_data[x] = cl_data.groupby(group_with)[x].apply(lambda fill_it: ffbf(fill_it))
который выполняет ffill()
и bfill()
. В идеале я хочу функцию, которая сначала пытается линейно интегрировать недостающие значения, затем пытается заполнить их вперед, а затем заполнить их в обратном направлении.
Любые быстрые способы его достижения? Заранее благодарю вас.
Комментарии:
Ответ №1:
Я считаю, что вам нужно сначала преобразовать столбцы в значения с плавающей запятой, если ,
есть:
df = pd.read_csv(file, thousands=',')
Или:
df['revenues'] = df['revenues'].replace(',','', regex=True).astype(float)
а затем добавьте DataFrame.interpolate
:
def ffbf(x):
return x.interpolate().ffill().bfill()
Комментарии:
1. если у меня установлен этот параметр, pd.options.display . float_format = ‘{:,.2f}’.format, я не думаю, что мне все еще нужно заменить ‘,’ верно?
2. @sophods — Если это только diplay, то нет 😉