Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么数据帧返回数值数组而索引数组返回布尔值?_Python_Pandas - Fatal编程技术网

Python 为什么数据帧返回数值数组而索引数组返回布尔值?

Python 为什么数据帧返回数值数组而索引数组返回布尔值?,python,pandas,Python,Pandas,我正在学习如何通过数据帧来训练和测试样本。 我回顾了一篇文章,但我不能理解一些关于代码语法的细节 In [11]: df = pd.DataFrame(np.random.randn(100, 2)) In [12]: msk = np.random.rand(len(df)) < 0.8 In [13]: train = df[msk] In [14]: test = df[~msk] In [15]: len(test) Out[15]: 21 In [16]: len(tr

我正在学习如何通过数据帧来训练和测试样本。 我回顾了一篇文章,但我不能理解一些关于代码语法的细节

In [11]: df = pd.DataFrame(np.random.randn(100, 2))

In [12]: msk = np.random.rand(len(df)) < 0.8

In [13]: train = df[msk]

In [14]: test = df[~msk]

In [15]: len(test)
Out[15]: 21

In [16]: len(train)
Out[16]: 79
[11]中的
df=pd.DataFrame(np.random.randn(100,2))
在[12]中:msk=np.random.rand(len(df))<0.8
In[13]:列车=df[msk]
在[14]中:test=df[~msk]
In[15]:len(测试)
Out[15]:21
In[16]:len(列车)
Out[16]:79

因为msk将返回一个布尔值数组。msk是df的索引,df[msk]如何返回实际的数值数据?根据我的理解,df的索引应该是一个字符串或字符串数组。

在NumPy和Pandas中,与正在索引的数组长度相同的布尔数组被视为“掩码”,并选择掩码为真的值。

在NumPy和Pandas中,与正在索引的数组长度相同的布尔数组将被视为“掩码”,并选择掩码为真的值。

来自以下网站的Pandas文档:

您可以使用相同的布尔向量从数据帧中选择行 长度作为数据帧的索引


在您的示例中,通过使用
df[msk]
可以获得
df
中的行,这些行在布尔向量
msk
中具有与
True
值相同的索引,其中
df[~msk]
对应于
msk

中的
False
值,这些值来自以下文件:

temp = np.array([1, 1, 1, 2, 2, 2])
import numpy as np
print(temp == 1)

Output:
[ True  True  True False False False]
您可以使用相同的布尔向量从数据帧中选择行 长度作为数据帧的索引

在您的示例中,通过使用
df[msk]
可以得到
df
中的行,这些行具有布尔向量
msk
True
值的相同索引,其中
df[~msk]
对应于
msk
中的
False

temp = np.array([1, 1, 1, 2, 2, 2])
import numpy as np
print(temp == 1)

Output:
[ True  True  True False False False]
如果temp中的每个元素都等于“1”,则会对其进行检查,并返回相同的布尔列表。你所做的恰恰相反

这只有在numpy中才可能实现。Python列表不支持布尔索引。在python本机列表上应用相同的值,则返回“False”,因为这会将数字与整个列表进行比较

如果temp中的每个元素都等于“1”,则会对其进行检查,并返回相同的布尔列表。你所做的恰恰相反


这只有在numpy中才可能实现。Python列表不支持布尔索引。在python原生列表上应用相同的方法,则返回“False”,因为这会将数字与整个列表进行比较。

这是一个纯粹的
pandas
问题,与
机器学习
线性回归
无关-请不要垃圾邮件发送不相关的标记(已删除).这是一个纯粹的
pandas
问题,与
机器学习
线性回归
无关-请不要垃圾邮件无关的标签(已删除)。