python - pandas fillna inplace with multiindex

标签 python pandas

我有一个带有多索引的数据框

       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/

相关文章:

python - 在 Pandas 中循环清理多个文档并将它们保存到一本书中

Python csv字符串到数组

python - 无法通过分发将 pip 与 Python 3.2 一起使用

python - 透视数据框 reshape 并查找前一天计数,但第 0 天值为 0

python - 如何从Excel文件中获取特定行

python - Pandas - 用日期范围填充数据框

python - PyQt 中的线程

python - 复制表 - Openpyxl : type object 'Workbook' has no attribute 'copy_worksheet'

python - 如何使python中的值变为0,使其返回到相同的值?

python - Pandas - 聚合不一致的值类型(字符串与列表)