如何让Pandas读取CSV时自动填充缺失的多层行索引值?
解决Pandas读取CSV时缺失多级索引继承上一行值的问题
问题说明
当CSV文件中多级索引的第一列存在空值(即缺失的索引值),使用pd.read_csv("file.csv", index_col=[0,1])读取后,空值会被识别为NaN,但我们需要让这些缺失的索引自动继承上一行对应的索引值。
示例CSV内容
parameter1,parameter2,2010,2011,2012 A,B,foo,foo,foo ,C,foo,foo,foo ,D,foo,foo,foo M,N,bar,bar,bar ,O,bar,bar,bar
当前读取结果
2010 2011 2012 A B foo foo foo NaN C foo foo foo D foo foo foo M N bar bar bar NaN O bar bar bar
期望读取结果
2010 2011 2012 A B foo foo foo C foo foo foo D foo foo foo M N bar bar bar O bar bar bar
解决方案
读取CSV后,对多级索引的第一层级使用**向前填充(forward fill)**即可实现需求,提供两种简洁实现方式:
方式一:通过索引转DataFrame填充
import pandas as pd # 读取CSV并指定多级索引 df = pd.read_csv("file.csv", index_col=[0, 1]) # 将索引转为DataFrame,填充第一级的NaN值 idx_df = df.index.to_frame() idx_df["parameter1"] = idx_df["parameter1"].ffill() # 重新设置为多级索引 df.index = pd.MultiIndex.from_frame(idx_df)
方式二:直接操作索引层级
import pandas as pd df = pd.read_csv("file.csv", index_col=[0, 1]) # 对索引第一级执行向前填充,替换原层级 df.index = df.index.set_levels(df.index.get_level_values(0).ffill(), level=0)
执行上述代码后,DataFrame的索引就会自动继承上一行的缺失索引值,符合期望结果。
内容的提问来源于stack exchange,提问作者tikej
相关产品推荐
相关产品推荐

