小编ada*_*.ra的帖子

如何调试垂死的Jupyter Python3内核?

我在使用Python 3内核的Jupyter笔记本上使用scipy和scikits.learn运行一些代码.在计算过程中,内核正在重新启动,并显示一条消息对话框"内核似乎已经死亡.它会自动重启." 底层Jupyter进程的stderr只是记录了内核死亡的事实,并且将在没有任何有用消息的情况下重新启动.有没有办法检查潜在的错误?它可能是来自某些C++代码的段错误,但我只能猜测.我搜索了服务器上的任何相关日志,但未找到任何有用的信息.

python ipython python-3.x scikit-learn jupyter-notebook

13
推荐指数
1
解决办法
1151
查看次数

Python:无论从哪里导入模块,都可以模拟修补模块

我需要确保运行单元测试不会触发调用一个沉重的外部世界函数,比如这个:

# 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 并更改导入,但是这样我不能保证在未来的开发过程中有人不会破坏这个规定。我相信测试应该测试行为而不是实现细节。

python unit-testing monkeypatching python-import

7
推荐指数
2
解决办法
1万
查看次数

从groupby和多个聚合中展平分层索引的pandas.DataFrame

我正在按多列对数据帧进行分组并聚合以获取多个统计信息.如何获得一个完全平坦的结构,每个可能的组密钥组合枚举为行,每个统计数据作为列存在?

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 indexing aggregate pandas

3
推荐指数
1
解决办法
1325
查看次数