我在使用Python 3内核的Jupyter笔记本上使用scipy和scikits.learn运行一些代码.在计算过程中,内核正在重新启动,并显示一条消息对话框"内核似乎已经死亡.它会自动重启." 底层Jupyter进程的stderr只是记录了内核死亡的事实,并且将在没有任何有用消息的情况下重新启动.有没有办法检查潜在的错误?它可能是来自某些C++代码的段错误,但我只能猜测.我搜索了服务器上的任何相关日志,但未找到任何有用的信息.
我需要确保运行单元测试不会触发调用一个沉重的外部世界函数,比如这个:
# bigbad.py
def request(param):
return 'I searched the whole Internet for "{}"'.format(param)
Run Code Online (Sandbox Code Playgroud)
多个模块使用这个函数 (bigbad.request) 并且它们以不同的方式导入它(在现实生活中它也可能从外部库导入)。假设有两个模块 a 和 b,其中 b 依赖于 a 并且都使用该函数:
# a.py, from...import
from bigbad import request
def routine_a():
return request('a')
# b.py, imports directly
import a
import bigbad
def routine_b():
resp_a = a.routine_a()
return 'resp_a: {}, resp_b=request(resp_a): {}'.format(resp_a, bigbad.request(resp_a))
Run Code Online (Sandbox Code Playgroud)
有没有办法确保 bigbad.request 永远不会被调用?此代码仅模拟其中一个导入:
# test_b.py
import unittest
from unittest import mock
import b
with mock.patch('bigbad.request') as mock_request:
mock_request.return_value = 'mocked'
print(b.routine_b())
Run Code Online (Sandbox Code Playgroud)
显然我可以重构 b 并更改导入,但是这样我不能保证在未来的开发过程中有人不会破坏这个规定。我相信测试应该测试行为而不是实现细节。
我正在按多列对数据帧进行分组并聚合以获取多个统计信息.如何获得一个完全平坦的结构,每个可能的组密钥组合枚举为行,每个统计数据作为列存在?
import numpy as np
import pandas as pd
cities = ['Berlin', 'Oslo']
days = ['Monday', 'Friday']
data = pd.DataFrame({
'city': np.random.choice(cities, 12),
'day': np.random.choice(days, 12),
'people': np.random.normal(loc=10, size=12),
'cats': np.random.normal(loc=6, size=12)})
grouped = data.groupby(['city', 'day']).agg([np.mean, np.std])
Run Code Online (Sandbox Code Playgroud)
这样我就得到了:
cats people
mean std mean std
city day
Berlin Friday 6.146924 0.721263 10.445606 0.730992
Monday 5.239267 NaN 9.022811 NaN
Oslo Friday 6.322276 0.866899 11.579813 0.114341
Monday 5.028919 0.815674 10.458439 1.182689
Run Code Online (Sandbox Code Playgroud)
我需要弄平:
city day cats_mean cats_std people_mean people_std
Berlin Friday 6.146924 0.721263 10.445606 …Run Code Online (Sandbox Code Playgroud) python ×3
aggregate ×1
indexing ×1
ipython ×1
pandas ×1
python-3.x ×1
scikit-learn ×1
unit-testing ×1