Python 为什么在使用pd.dataframe()创建数据帧并手动设置索引时会出现NAN? 让我们考虑一下这个数据帧: 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

Python 为什么在使用pd.dataframe()创建数据帧并手动设置索引时会出现NAN? 让我们考虑一下这个数据帧: 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,python,pandas,numpy,Python,Pandas,Numpy,现在让我们假设我们要选择两列,并使用另一列作为索引。我们可以使用set_index()并轻松完成它,但让我们尝试一种更麻烦的方法,并使用pd.DataFrame(): 为什么会产生NaN值 如果将整数列表作为索引传递(例如index=[10,11,12,13]),也会出现同样的问题 通过使用df[['B','AB']].值作为numpy.ndarray传递数据,我们可以很容易地解决这个问题。无NaN值将以这种方式显示 此外,在不再指定索引的情况下,pd.DataFrame(df[['B','AB

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

为什么会产生
NaN

如果将整数列表作为索引传递(例如
index=[10,11,12,13]
),也会出现同样的问题

通过使用
df[['B','AB']].值作为
numpy.ndarray
传递数据,我们可以很容易地解决这个问题。无
NaN
值将以这种方式显示

此外,在不再指定索引的情况下,
pd.DataFrame(df[['B','AB']])
也不会显示任何
NaN


但是,同样,为什么上面的代码的
NaN
值呢?

如果您将一个数据帧作为
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
s填充缺少的值

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

>>> 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

因为索引
10
11
0.704744
等处没有
B
AB
的值。您的意思是我传递给
索引
参数的值用于选择
df[['B','AB']]
中的数据点?
>>> 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