fillNa (0) вместо этого производит None - PullRequest
0 голосов
/ 21 сентября 2018

Мой вопрос находится чуть ниже фрагмента кода, ниже:

У меня есть необработанные данные временных рядов датчиков, которые ... становятся очень близкими к использованию сейчас:)

enter image description here

locDf = locationDf.copy()
locDf.set_index('date', inplace=True)

locDfs = {}
for user, user_loc_dc in locDf.groupby('user'):
    locDfs[user] = user_loc_dc.resample('15T').agg('max').bfill()

aDf = appDf.copy()
aDf.set_index('date', inplace=True)

userLocAppDfs = {}
appDfs = []
for user, a2_df in aDf.groupby('user'):
    userDf = a2_df.resample('15T').agg('min')

    userDf.reset_index(inplace=True)
    userDf = pd.crosstab(index=userDf['date'], columns=userDf['app'], values=userDf['metric'], aggfunc=np.mean).fillna(0, downcast='infer')

    userDf['user'] = user

    userDf.reset_index(inplace=True)
    userDf.set_index('date', inplace=True)

    appDfs.append(userDf)
    userLocAppDfs[user] = userDf

    loDf = locDfs[user]
    loDf.reset_index(inplace=True)
    loDf = pd.crosstab([loDf.date, loDf.user], loDf.location)
    loDf.reset_index(inplace=True)

    loDf.set_index('date', inplace=True)
    loDf.drop('user', axis=1, inplace=True)

    userLocAppDfs[user] = userLocAppDfs[user].join(loDf, how='outer')
    userLocAppDfs[user]['user'].fillna(user, inplace=True)

    #for app in a2_df['app'].unique():
    #    userLocAppDfs[user][app] = userLocAppDfs[user][app].fillna(0, inplace=True)


userLocAppDfs['user_1'].head(5)

Вопрос

Если я раскомментирую последние две строки, чтобы попытаться заполнить NaN в начале, я не получу нулей.Я получаю Нет .:( Может кто-нибудь сказать мне, почему?

none

Я хотел бы .. вы знаете, получить 0 там:

2017-08-28 00:00:00 0   0   user_1  0.0 0.0 0.0 1.0 0.0
2017-08-28 00:15:00 0   0   user_1  0.0 0.0 1.0 0.0 0.0
2017-08-28 00:30:00 0   0   user_1  0.0 0.0 1.0 0.0 0.0
2017-08-28 00:45:00 0   0   user_1  0.0 0.0 1.0 0.0 0.0
2017-08-28 01:00:00 0   0   user_1  0.0 0.0 1.0 0.0 0.0

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

1 Ответ

0 голосов
/ 21 сентября 2018

Попробуйте

for app in a2_df['app'].unique():
    userLocAppDfs[user][app].fillna(0, inplace=True)
    # or userLocAppDfs[user][app] = userLocAppDfs[user][app].fillna(0)

Это потому, что вы указали inplace = True и одновременно присваиваете его обратно.

Обратите внимание, что df.fillna(0, inplace=True) не вернет значение.Скорее это будет напрямую изменять оригинал df.Попробуйте print(df.fillna(0, inplace=True)), это даст вам None.Так что вы сделали выше, присвоив None столбцу apps.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...