(Использование pandas) Ячейки базы данных не обновляются вне функции. Что делать? - PullRequest
1 голос
/ 28 мая 2020

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

Ниже приводится функция, которую я использую, и некоторые данные.

import pandas

def avg_round(a,b,c):
    x = float(round((a + b)/2,c))
    return x

def fill_in_single(c,ro): ##ro signifies to how many digits I need to round the new value to, "c" is the column we need to edit
    m_list = single_missing(c) ##this list has all the rows that are empty in the column "c"
    for i_obj in m_list:
        act_row=i_obj-2 ##I need to do this because the rows are stored as their excel row numbers which is different from the pandas df row number
        prev_row=act_row-1
        next_row=act_row+1
        prev_val=c[prev_row]
        next_val=c[next_row]
        new_val=avg_round(prev_val,next_val,ro)
        df.at[act_row,'{}'.format(c)] = new_val

fill_in_single(Column,0)
print(df.at[2,'Column'])

OUTPUT:
nan

   Index Column
    0       1
    1       9
    2 
    3       0

Итак, когда я запускаю это и пытаюсь распечатать значение якобы «обновленного» столбца, я получаю «nan» вместо new_val. Я выполнил эту команду печати в функции, и она возвращает new_val. Я действительно не уверен, что мне делать?

Я также запускал код вне функции, и он правильно обновляет столбцы. Так почему же функция не работает?

1 Ответ

0 голосов
/ 28 мая 2020

Вы можете попробовать это

Назад и вперед заполните данные сначала, как показано ниже, и возьмите среднее значение этих двух столбцов при замене nan

df['ffill'] = df['y'].ffill()
df['bfill'] = df['y'].bfill()
df['y'].fillna(df[['ffill', 'bfill']].mean(axis=1))

Вот набор данных я использовал

d = {'x':['a','a','a','b','b','b','c','c','c','d','d','d'],
 'y':[1,np.nan,3,1,2,3,1,np.nan,3,1,2,3]}
df = pd.DataFrame(d)
...