小编ont*_*ist的帖子

pandas timedelta列上的split-apply-combine

我有一个带有timedeltas列的DataFrame(实际上在检查时dtype是timedelta64[ns]或者<m8[ns]),我想做一个split-combine-apply,但是timedelta列被删除了:

import pandas as pd

import numpy as np

pd.__version__
Out[3]: '0.13.0rc1'

np.__version__
Out[4]: '1.8.0'

data = pd.DataFrame(np.random.rand(10, 3), columns=['f1', 'f2', 'td'])

data['td'] *= 10000000

data['td'] = pd.Series(data['td'], dtype='<m8[ns]')

data
Out[8]: 
         f1        f2              td
0  0.990140  0.948313 00:00:00.003066
1  0.277125  0.993549 00:00:00.001443
2  0.016427  0.581129 00:00:00.009257
3  0.048662  0.512215 00:00:00.000702
4  0.846301  0.179160 00:00:00.000396
5  0.568323  0.419887 00:00:00.000266
6  0.328182  0.919897 00:00:00.006138
7  0.292882  0.213219 00:00:00.008876
8  0.623332  0.003409 00:00:00.000322
9  0.650436  0.844180 00:00:00.006873

[10 rows …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

如何为环境禁用`site.ENABLE_USER_SITE`?

来自文档:

site.ENABLE_USER_SITE

标记显示用户site-packages目录的状态.True意味着它已启用并已添加到sys.path.False表示已被用户请求(带-sPYTHONNOUSERSITE)禁用.无表示由于安全原因(用户或组ID与有效ID不匹配)或管理员而被禁用.

我对这句话或管理员特别感兴趣.在我是管理员(即我自己的)的机器上,如何针对特定的解释器可执行文件全局禁用此选项?

我想这样做的原因是新的conda环境启用了这个:https://github.com/conda/conda/issues/448

python

8
推荐指数
2
解决办法
2653
查看次数

嵌套函数相等的解决方法

我有一个嵌套函数,我用它作为回调pyglet:

def get_stop_function(stop_key):
    def stop_on_key(symbol, _):
        if symbol == getattr(pyglet.window.key, stop_key):
            pyglet.app.exit()
    return stop_on_key

pyglet.window.set_handler('on_key_press', get_stop_function('ENTER'))
Run Code Online (Sandbox Code Playgroud)

但是当我需要再次引用嵌套函数时,我会遇到问题:

pyglet.window.remove_handler('on_key_press', get_stop_function('ENTER'))
Run Code Online (Sandbox Code Playgroud)

由于python处理函数的方式,这不起作用:

my_stop_function = get_stop_function('ENTER')
my_stop_function is get_stop_function('ENTER')  # False
my_stop_function == get_stop_function('ENTER')  # False
Run Code Online (Sandbox Code Playgroud)

感谢两个类似的 问题我理解发生了什么,但我不确定我的案例的解决方法是什么.我正在查看pyglet源代码,它看起来像pyglet使用相等来找到要删除的处理程序.

所以我的最后一个问题是:如何覆盖内部函数的__eq__方法(或其他一些dunder),以便相同的嵌套函数相等?

(另一种解决方法是自己存储对函数的引用,但这会复制pyglet的工作,会因许多回调而变得混乱,反正我对这个问题很好奇!)

编辑:实际上,在我上面链接的问题中,它解释了方法具有值相等但不具有引用相等性.使用嵌套函数,您甚至无法获得值相等,这就是我所需要的.

编辑2:我可能接受Bi Rico的回答,但有人知道为什么以下不起作用:

def get_stop_function(stop_key):
    def stop_on_key(symbol, _):
        if symbol == getattr(pyglet.window.key, stop_key):
            pyglet.app.exit()
    stop_on_key.__name__ = '__stop_on_' + stop_key + '__'
    stop_on_key.__eq__ = lambda x: x.__name__ == '__stop_on_' + stop_key + '__'
    return stop_on_key

get_stop_function('ENTER') …
Run Code Online (Sandbox Code Playgroud)

python nested pyglet python-3.x

5
推荐指数
1
解决办法
170
查看次数

标签 统计

python ×3

nested ×1

pandas ×1

pyglet ×1

python-3.x ×1