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