我有一个带有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) 来自文档:
site.ENABLE_USER_SITE标记显示用户site-packages目录的状态.
True意味着它已启用并已添加到sys.path.False表示已被用户请求(带-s或PYTHONNOUSERSITE)禁用.无表示由于安全原因(用户或组ID与有效ID不匹配)或管理员而被禁用.
我对这句话或管理员特别感兴趣.在我是管理员(即我自己的)的机器上,如何针对特定的解释器可执行文件全局禁用此选项?
我想这样做的原因是新的conda环境启用了这个:https://github.com/conda/conda/issues/448
我有一个嵌套函数,我用它作为回调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)