python - 数据框的模拟结果适用
问题描述
我正在尝试模拟在 dataframe.apply(function) 中调用的函数的结果,请参见下面的代码:
def simple_zero(value):
a = value
return a-value
def difficult_zero(value):
a = np.zeros(value.shape, dtype=int)
return a
@mock.patch('difficult_zero', side_effect='simple_zero')
def test_mock_df_apply():
df = pd.DataFrame([[4, 9],] * 3, columns=['A', 'B'])
df = df.apply(difficult_zero)
print(df)
assert 0
运行此测试会导致“TypeError:需要一个有效的目标来修补。您提供了:'difficult_zero'”。我已经尝试过 patchside_effect='simple_zero'
和 patch return_value=pd.DataFrame([[0, 0],] * 3, columns=['A', 'B'])
。
预期输出为
A B
0 0 0
1 0 0
2 0 0
如何模拟应用数据框的结果?
编辑:固定 simple_zero 功能
解决方案
mock模块的正确用法如下:
@mock.patch(__name__+'.difficult_zero', new=simple_zero)
目标'__name__+'.difficult_zero'
是表示函数定义的字符串。由于 mock 对当前运行时范围一无所知,我们应该将它与函数名称一起传递。在这种情况下,这可以__name__
。使用另一个函数的参数不是side_effect='function'
,但它是new=function
。它可能已经改变,但我不确定!
希望这可以帮助!
推荐阅读
- powershell - 如何同时安装 Powershell 模块?
- javascript - 在 mouseleave 事件上关闭 daterangepicker
- swift - 如何在从 firebase 获取值时更改 NavBar 标题颜色
- php - 如何在共享服务器(GoDaddy)上部署 Laravel-Vue 项目
- python - python ECDSA和C micro-ecc库之间的ECDSA签名和验证问题
- android - anko bg的替代品是什么?
- mysql - 通过eventid获取每个用户的最后一条记录
- sql - 如何仅动态显示表中的特定 cloumn 数据
- c++ - 为什么语言环境对象会释放不是由它创建的构面?
- javascript - iOS Safari 在 window.location.href = ... 上暂停动画?