我有一个浮点数组(一些正常数字,一些nans)来自一个pandas数据帧的应用程序.
由于某种原因,numpy.isnan在这个数组上失败,但是如下所示,每个元素都是一个浮点数,numpy.isnan在每个元素上正确运行,变量的类型肯定是一个numpy数组.
这是怎么回事?!
set([type(x) for x in tester])
Out[59]: {float}
tester
Out[60]:
array([-0.7000000000000001, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan], dtype=object)
set([type(x) for x in tester])
Out[61]: {float}
np.isnan(tester)
Traceback (most recent call last):
File "<ipython-input-62-e3638605b43c>", line …Run Code Online (Sandbox Code Playgroud) 我有一大块代码,在某些地方,在pandas中产生一个带有复制警告的设置(这个问题).
我知道如何解决问题,但我找不到它的行号!有没有办法退出行号(除了蛮力方法,如调试步进或多次打印)?我得到的唯一输出是下面的,它没有上升到我的代码堆栈:
C:\Anaconda3\lib\site-packages\pandas\core\frame.py:2302: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame **kwargs)
Run Code Online (Sandbox Code Playgroud) 我发现numpy剪辑功能的性能明显慢于我自己戴着面具(164us vs 74us).剪辑功能是否会执行额外的操作,使其花费两倍的时间?
%timeit growth.clip(-maxg, maxg)
10000 loops, best of 3: 164 µs per loop
%timeit growth[np.greater(growth,maxg)] = maxg
10000 loops, best of 3: 37.1 µs per loop
%timeit growth[np.less(growth,-maxg)] = -maxg
10000 loops, best of 3: 37 µs per loop
Run Code Online (Sandbox Code Playgroud)
重置增长数组并按相反顺序进行测试后:
%timeit growth[np.less(growth,-maxg)] = -maxg
10000 loops, best of 3: 36.6 µs per loop
%timeit growth[np.greater(growth,maxg)] = maxg
10000 loops, best of 3: 37.3 µs per loop
%timeit growth.clip(-maxg, maxg)
100 loops, best of 3: 150 µs per loop …Run Code Online (Sandbox Code Playgroud)