创建没有NAN的多索引数据帧

2024-10-06 15:20:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我觉得我错过了一些基本的东西。我有这样一个熊猫数据帧:

df = pd.DataFrame(list(range(3)).T
df.columns = ['a.first', 'a.second', 'b']

#    a.first  a.second  b
# 0        0         1  2

我想创建的是一个多索引数据帧,在这里我可以使用df.a、df.a.first和df.b。到目前为止,我得到的是str split方法:

a.columns = a.columns.str.split('.', expand=True)
#        a            b
#    first  second  NaN
# 0      0       1    2

很明显,NaN在这里是个问题,因为要访问值b,需要调用df.b[np.nan],这显然是错误的

从这里开始,所有出现在我脑海中的解决方案开始感觉像是一种变通方法,在这里我遍历列并尝试用空字符串替换nan。我想一定有更直接的方法,因为我想这是一个很常见的问题,不是吗

编辑:到目前为止,我想到的最简单的解决方案是:

def apply_multiindex(df, hier_sep='.'):
    depths = df.columns.str.split(hier_sep).map(len)
    add_hiers = max(depths)-depths
    df.columns = [column + hier_sep*add_hier[c]
                  for c, column in enumerate(df.columns)]
    df.columns = df.columns.str.split(hier_sep, expand=True)

apply_multiindex(a)
#        a          b
#    first  second  
# 0      0       1  2

我仍然期待一个更干净的解决方案:)


Tags: columns数据方法truedfnan解决方案sep
1条回答
网友
1楼 · 发布于 2024-10-06 15:20:33

对于我来说,由于MultiIndexfillna未实现,因此使用rename时缺少值:

df = pd.DataFrame([list(range(3))], columns = ['a.first', 'a.second', 'b'])
df.columns = df.columns.str.split('.', expand=True)

df = df.rename(columns = {np.nan:''})
print (df)
      a         b
  first second   
0     0      1  2

相关问题 更多 >