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表示楼层划分。它使用简单划分。它与楼层划分有关。感谢这两个解决方案,这些将非常有用。也谢谢你的邀请。