Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.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 ValueError数据帧上楼层分割操作的异常_Python_Pandas_Numpy - Fatal编程技术网

Python ValueError数据帧上楼层分割操作的异常

Python ValueError数据帧上楼层分割操作的异常,python,pandas,numpy,Python,Pandas,Numpy,我正在对数据帧的列进行算术运算。当我操作的(子-数据帧的大小超过阈值时,我得到一个ValueError异常 作为例子,考虑数据文件< /代码>: import numpy as np import pandas as pd random_list = list(np.random.randint(1, 30, 10000)) df = pd.DataFrame({"p": random_list, "q": random_list}) 此操作的工作原理是: df[0:5000] // [2,

我正在对
数据帧的列进行算术运算。当我操作的(子-
数据帧
的大小超过阈值时,我得到一个
ValueError
异常

作为例子,考虑<代码>数据文件< /代码>:

import numpy as np
import pandas as pd

random_list = list(np.random.randint(1, 30, 10000))
df = pd.DataFrame({"p": random_list, "q": random_list})
此操作的工作原理是:

df[0:5000] // [2, 10] 
但这一次失败了:

df[0:5001] // [2, 10]
除此之外:

ValueError: operands could not be broadcast together with shapes (10002,) (2,) 
一旦切片生成大于5000的
数据帧
len
,就会抛出异常。阈值取决于列数。考虑从字典生成的
数据帧

{"p": random_list, "q": random_list, "r": random_list}
如果楼层划分为长度为3的列表,则对于长度大于3334的任何切片,上述操作都将失败


发生了什么事?

更深层次的问题超出了我的想象,但我可以告诉你为什么会发生错误

pandas\core\computation\expressions.py
第31行中,声明了以下常量:

\u最小元素=10000

如果您尝试执行的操作超过了要计算的元素数量,它将尝试使用
numexpr
模块来加速计算。虽然在
numexpr
中支持floor division操作符,但问题是表达式被制作成
变量节点
,以在表达式中使用,而不支持floor division。请记住,例如,支持
加法
运算符

它源于以下几行:

if sys.version_info[0] < 3:
    __div__ = div_op
    __rdiv__ = binop('div', reversed=True)
如果系统版本信息[0]<3:
__div\uuuu=div\u op
__rdiv_uu=binop('div',reversed=True)
numexpr/expressions.py
中。有趣的是,
系统版本信息[0]>=3
从未定义过
\u div\u
\u rdiv\u
。如果您添加行以手动实现这些,您的问题就解决了。换句话说:它是
numexpr
模块中的一个bug

当然,您也可以声明
\u MIN\u ELEMENTS=20000
或类似值,以在遇到相同错误之前扩展限制


警告一句:你真的希望在编辑这些核心模块的部分时要小心,因为摆弄它们会破坏很多东西。

你能发布完整的错误消息吗?@GPhilo我已经更新了帖子。你在那行代码中到底想做什么?@GPhilo我在第一列中用所有值中的2除以底数,第二列中所有值的10表示楼层划分。它使用简单划分。它与楼层划分有关。感谢这两个解决方案,这些将非常有用。也谢谢你的邀请。