为何Pandas的.reindex()方法在索引长度相同时丢失数据?
问题原因及解决方法
为什么会出现NaN?
你用df.reindex(columns=ind)时,原DataFrame的列是MultiIndex(每个列名是('foo', Timestamp('2020-02-01'))这类元组),而你生成的ind是普通字符串(比如'foo_2020_02')。reindex的逻辑是在原索引里寻找和新索引完全匹配的项,找不到就填充NaN。这两种列名类型完全不重合,所以所有列都匹配失败,结果全是NaN。
正确的扁平化列层级方法
不需要用reindex,直接把生成的ind赋值给df.columns即可:
df.columns = ind
这样就能直接替换原有的MultiIndex列,完整保留所有数据。
另外,也可以用更简洁的方式生成扁平化列名,无需手动遍历:
df.columns = df.columns.map(lambda x: f"{x[0]}_{x[1].strftime('%Y_%m')}")
内容的提问来源于stack exchange,提问作者Nathan Keloglanian
相关产品推荐
相关产品推荐

