fillNa(0) 而不是生成 None
fillNa(0) instead producing None
我的问题就在代码段下面,如下:
我有原始传感器时间序列数据..现在真的很接近可用:)
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_* 数字的滚动平均值,这样我就可以得到一条曲线。
尝试
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)
不会 return 一个值。而是直接修改原来的df
。试试 print(df.fillna(0, inplace=True))
,它会给你 None
。所以您在上面所做的是将 None
分配给列 apps
。
我的问题就在代码段下面,如下:
我有原始传感器时间序列数据..现在真的很接近可用:)
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_* 数字的滚动平均值,这样我就可以得到一条曲线。
尝试
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)
不会 return 一个值。而是直接修改原来的df
。试试 print(df.fillna(0, inplace=True))
,它会给你 None
。所以您在上面所做的是将 None
分配给列 apps
。