为什么在创建具有pd.数据帧()并手动设置索引?

2024-04-19 05:23:05 发布

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

让我们考虑一下这个数据帧:

df = pd.DataFrame(np.random.rand(4,4), columns = ['A', 'B', 'AB', 'O'])
df

Out[1]:
        A           B          AB           O
0   0.704744    0.032988    0.514788    0.405281
1   0.978119    0.354312    0.273255    0.908691
2   0.653161    0.337653    0.309225    0.008059
3   0.023022    0.110995    0.751048    0.088853

现在假设我们要选择两列,并使用另一列作为索引。我们可以使用set_index()并轻松完成,但让我们尝试一种更麻烦的方法,并使用pd.DataFrame()

pd.DataFrame(df[['B','AB']], index = df['A'].values)

Out[2]:
             B  AB
0.704744    NaN NaN
0.978119    NaN NaN
0.653161    NaN NaN
0.023022    NaN NaN

为什么会产生NaN值?你知道吗

如果我传递一个整数列表作为索引,同样的问题也会出现(例如index = [10,11,12,13])。你知道吗

通过将数据作为numpy.ndarraydf[['B','AB']].values传递,我们可以很容易地解决这个问题。不会以这种方式显示NaN值。你知道吗

另外,在不再指定索引的地方,没有NaN值与pd.DataFrame(df[['B','AB']])一起显示。你知道吗

但是,同样,为什么上面代码的NaN值?你知道吗


Tags: columns数据dataframedfindexabnprandom
1条回答
网友
1楼 · 发布于 2024-04-19 05:23:05

如果您传递一个dataframe作为DataFrame构造函数的第一个参数,它将用给定的索引构造一个新的dataframe,并且从原始dataframe赋值,因为该索引有值。你知道吗

例如,如果你写:

pd.DataFrame(df[['B','AB']],index=[0,2])

它将选择第一行和第三行:

          A         B        AB         O
0  0.501622  0.422913  0.570804  0.507912
1  0.507934  0.698122  0.745761  0.201501
2  0.333501  0.567291  0.472924  0.813184
3  0.788795  0.733176  0.843651  0.603158
>>> pd.DataFrame(df[['B','AB']],index=[0,2])
          B        AB
0  0.422913  0.570804
2  0.567291  0.472924

因为没有浮点数的值(就像你的问题0.704744),它将用NaN填充缺少的值

不过,您可以通过以下方式轻松获得所需:

>>> df[['A', 'B', 'AB']].set_index('A')
                 B        AB
A                           
0.501622  0.422913  0.570804
0.507934  0.698122  0.745761
0.333501  0.567291  0.472924
0.788795  0.733176  0.843651

相关问题 更多 >