我有一个带有多索引的数据框
values observations
time x1 x2 x3 x4 ... x1 x2 x3 x4 ...
t1 v1_1 nan v3_1 v4_1 ... o1_1 nan o3_1 o4_1 ...
t2 v1_2 v2_2 nan v4_2 ... o1_2 o2_2 nan o4_2 ...
我正在尝试用 0 填充观察框
df.loc[:,('observations')].fillna(value=0, inplace=True)
但这并没有填充df。当我切片并应用 fillna 时,它起作用了
dfx = df.loc[:,('observations')].fillna(value=0)
dfx把它的nans换成0了,我可以换掉原来的部分
df.observations = dfx
我不清楚为什么第一种方法行不通。似乎很奇怪。有哪位大侠能指教一下吗?
最佳答案
对我来说作品:
df['observations'] = df['observations'].fillna(0)
print (df)
values observations
time x1 x2 x3 x4 x1 x2 x3
t1 v1_1 NaN v3_1 v4_1 o1_1 0 o3_1 o4_1
t2 v1_2 v2_2 NaN v4_2 o1_2 o2_2 0 o4_2
我认为问题是 loc
不能就地工作。 所以你可以使用:
df1 = df.loc[:,('observations')]
df1.fillna(value=0, inplace=True)
另一种解决方案是通过切片
进行选择,但需要先按sort_index
对列名进行排序:
df.sort_index(inplace=True, axis=1)
idx = pd.IndexSlice
df.loc[:, idx['observations',:]] = df.loc[:, idx['observations',:]].fillna(0)
print (df)
observations values
time x1 x2 x3 x4 x1 x2 x3 x4
t1 o1_1 0 o3_1 o4_1 v1_1 NaN v3_1 v4_1
t2 o1_2 o2_2 0 o4_2 v1_2 v2_2 NaN v4_2
关于python - pandas fillna inplace with multiindex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38868269/