在大Pandas身上出现多指标赋值的NAN

2024-04-19 03:37:56 发布

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

我正在解决一个问题,我试图一片一片地构建一个多阵列,但结果我不断得到NAN。下面是一个简单的工作示例:

midx = pd.MultiIndex(levels=[['zero', 'one'], ['x', 'y']], codes=[[1, 1, 0, 0], [1, 0, 1, 0]])
df = pd.DataFrame(0, index=midx, columns=['A','B'])    #empty array
df1 = pd.DataFrame(np.random.randn(2, 2))                   #the array I want my slice to equal

df.loc['one']     # good so far
df.loc['one']=df1 # ok .....
df.loc['one']     # all NaNs

####### Output ########
>>> df
        A  B
one  y  0  0
     x  0  0
zero y  0  0
     x  0  0
>>> df.loc['one']
   A  B
y  0  0
x  0  0
>>> df.loc['one']=df1
>>> df.loc['one']
    A   B
y NaN NaN
x NaN NaN

为什么会这样,我该如何修复它


Tags: 示例dataframedfnanarrayoneloccodes
1条回答
网友
1楼 · 发布于 2024-04-19 03:37:56

df1赋值给df.loc['one']时,熊猫会尝试对齐索引值。。。他们没有。改为使用df1values属性

df.loc['one'] = df1.values

嗯。。。即使他们排好了队,也似乎不起作用。我的建议确实适用于你的例子,但仍有问题

假设df1定义为:

df1 = pd.DataFrame(np.random.randn(2, 2), index=['x', 'y'], columns=['A', 'B']) 

这将提供更多的保证,价值观是正确排列,但它有点恶心我了

df.loc['one'] = df1.reindex_like(df.loc['one']).values

另一个将必要级别添加到df1的hack

df.update(pd.concat({'one': df1}))

相关问题 更多 >