从熊猫文档中,我收集到了独特值的索引使得某些操作有效,并且偶尔会容忍非唯一索引.
从外部来看,看起来不是非独特的指数以任何方式被利用.例如,以下ix查询足够慢,似乎正在扫描整个数据帧
In [23]: import numpy as np
In [24]: import pandas as pd
In [25]: x = np.random.randint(0, 10**7, 10**7)
In [26]: df1 = pd.DataFrame({'x':x})
In [27]: df2 = df1.set_index('x', drop=False)
In [28]: %timeit df2.ix[0]
1 loops, best of 3: 402 ms per loop
In [29]: %timeit df1.ix[0]
10000 loops, best of 3: 123 us per loop
Run Code Online (Sandbox Code Playgroud)
(我意识到这两个ix查询不会返回相同的东西 - 它只是一个调用ix非唯一索引的示例显得慢得多)
有没有办法哄骗熊猫使用更快的查找方法,如二元搜索非唯一和/或排序索引?
规范化pandas DataFrame每一行的最常用的方法是什么?规范化列很容易,因此一个(非常难看!)选项是:
(df.T / df.T.sum()).T
Run Code Online (Sandbox Code Playgroud)
熊猫广播规则阻止df / df.sum(axis=1)这样做
我想在我正在研究的PyQt应用程序中嵌入一个IPython qt控制台小部件.下面提供的代码(并改编自/sf/answers/685754401/)适用于IPython v0.12.但是,这在IPython v0.13中崩溃self.heartbeat.start()了RuntimeError: threads can only be started once.注释掉这一行会显示小部件,但不会响应用户输入.
有谁知道如何实现IPython v0.13的等效功能?
"""
Adapted from
https://stackoverflow.com/a/9796491/1332492
"""
import os
import atexit
from IPython.zmq.ipkernel import IPKernelApp
from IPython.lib.kernel import find_connection_file
from IPython.frontend.qt.kernelmanager import QtKernelManager
from IPython.frontend.qt.console.rich_ipython_widget import RichIPythonWidget
from IPython.config.application import catch_config_error
from PyQt4 import QtCore
class IPythonLocalKernelApp(IPKernelApp):
DEFAULT_INSTANCE_ARGS = ['']
@catch_config_error
def initialize(self, argv=None):
super(IPythonLocalKernelApp, self).initialize(argv)
self.kernel.eventloop = self.loop_qt4_nonblocking
def loop_qt4_nonblocking(self, kernel):
"""Non-blocking version of the ipython qt4 kernel loop"""
kernel.timer = QtCore.QTimer()
kernel.timer.timeout.connect(kernel.do_one_iteration) …Run Code Online (Sandbox Code Playgroud) 我有一系列横跨经度= 0线的纬度/经度点.我想使用matplotlib Axes类来绘制这些,它们"包裹"水平尺寸,这样当朝向l = 360时,l = 1处的点被绘制为等于l = 361.理想情况下,我也喜欢定义平移/缩放动作的东西,所以我可以交互使用绘图.
我知道可以在matplotlib中定义自定义投影,但我还没有找到实现所有这些功能的圆柱投影的等价物.我宁愿不用basemap.有谁知道这样的事情是否存在?
我正在处理像这样的pandas DataFrames:
id x
0 1 10
1 1 20
2 2 100
3 2 200
4 1 NaN
5 2 NaN
6 1 300
7 1 NaN
Run Code Online (Sandbox Code Playgroud)
我想用一个具有相同'id'值的行替换每个NAN'x'和之前的非NAN'x':
id x
0 1 10
1 1 20
2 2 100
3 2 200
4 1 20
5 2 200
6 1 300
7 1 300
Run Code Online (Sandbox Code Playgroud)
有没有一些光滑的方法来做到这一点,而无需手动循环行?
我很难理解文件中的绝对路径@loader_path.
user@local:~$ otool -L zlib.so
zlib.so:
@loader_path/../../libz.1.dylib (compatibility version 1.0.0, current version 1.2.7)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.0.0)
Run Code Online (Sandbox Code Playgroud)
我想知道系统在哪里找到libz.1.dylib.
从一些Mac文档:
@ loader_path /此变量替换为包含mach-o二进制文件的目录的路径,该二进制文件包含使用@loader_path的load命令.因此,在每个二进制文件中,@ download_path解析为不同的路径
我猜想这意味着@loader_path只是目标文件(zlib.so)的路径,但这似乎不是真的.
是否有任何命令行实用程序将@loader_path解析为尝试打开库时使用的实际路径?
pandas factorize函数将一系列中的每个唯一值分配给基于0的顺序索引,并计算每个系列条目所属的索引.
我想pandas.factorize在多列上完成相同的操作:
import pandas as pd
df = pd.DataFrame({'x': [1, 1, 2, 2, 1, 1], 'y':[1, 2, 2, 2, 2, 1]})
pd.factorize(df)[0] # would like [0, 1, 2, 2, 1, 0]
Run Code Online (Sandbox Code Playgroud)
也就是说,我想确定数据帧的几列中每个唯一值的元组,为每个列分配一个顺序索引,并计算数据帧中每一行所属的索引.
Factorize仅适用于单列.pandas中有多列等效函数吗?
对于内置的python容器(list,tuple等),in操作符等同于any(y == item for item in container)前一种方法更快(更漂亮)的警告:
In [13]: container = range(10000)
In [14]: %timeit (-1 in container)
1000 loops, best of 3: 241 us per loop
In [15]: %timeit any(-1 == item for item in container)
1000 loops, best of 3: 1.2 ms per loop
Run Code Online (Sandbox Code Playgroud)
有相当于any(y is item for item in container)?也就是说,使用的测试is代替==?
考虑数组
x = np.array(['1', '2', 'a'])
绑定转换为float数组会引发异常
x.astype(np.float)
ValueError: could not convert string to float: a
Run Code Online (Sandbox Code Playgroud)
numpy是否提供了任何有效的方法将其强制转换为数值数组,用NAN之类的东西替换非数字值?
或者,是否有一个有效的numpy函数np.isnan,但它也测试非字母元素,如字母?
我试图更好地理解numpy的memmap如何处理非常大的文件的视图.下面的脚本打开一个内存映射的2048 ^ 3数组,并复制它的下采样128 ^ 3视图
import numpy as np
from time import time
FILE = '/Volumes/BlackBox/test.dat'
array = np.memmap(FILE, mode='r', shape=(2048,2048,2048), dtype=np.float64)
t = time()
for i in range(5):
view = np.array(array[::16, ::16, ::16])
t = ((time() - t) / 5) * 1000
print "Time (ms): %i" % t
Run Code Online (Sandbox Code Playgroud)
通常,这打印Time (ms): 80左右.但是,如果我将视图分配更改为
view = np.array(array[1::16, 2::16, 3::16])
Run Code Online (Sandbox Code Playgroud)
并运行三次,我得到以下内容:
Time (ms): 9988
Time (ms): 79
Time (ms): 78
Run Code Online (Sandbox Code Playgroud)
有人理解为什么第一次调用要慢得多吗?
我numpy.mgrid用来生成"坐标索引数组"
y, x = np.mgrid[0:3, 0:2]
print x
array([[0, 1],
[0, 1],
[0, 1]])
Run Code Online (Sandbox Code Playgroud)
在许多情况下,我会对这些数组进行一些切片(例如x[0, :])并丢弃其余的数据.有时,这些切片比原始阵列小得多,原始阵列的计算成本很高(即np.mgrid[0:512, 0:512, 0:512]).numpy是否提供了[coord[view] for coord in np.mgrid[0:512, 0:512, 0:512]不产生大型中间数组的等价物?
我意识到解决方案对于切片来说是微不足道的[0,:],但我正在寻找一种通用解决方案来处理索引numpy数组的任何有效方法
编辑
有些人要求提供具体的例子view.理想情况下,我希望有一个通用的解决方案来处理索引ndarray的任何有效方法.以下是上述3x2阵列的一些具体示例:
1) view = (1, slice(None, None, 2))
2) view = (np.array([0,1]), np.array([0, 1]))
3) view = np.array([[False, False], [False, True], [False, False]])
我正在寻找像这样的功能
def mgrid_with_view(array_shape, view)
...
Run Code Online (Sandbox Code Playgroud)
返回相当于[o[view] for o in np.indices(array_shape)]没有不必要的计算或内存.
QIcon在Qt4/PyQt4中将颜色色调应用于a的最简单方法是什么?我有几个单色QPixmaps,我想根据相关对象的属性重新着色.
JsonWriter[T]当调用toJson一个实例时,spray-json依赖于一个范围内的隐式存在T.
假设我有一个具有几个具体子类型的特征,每个子类型都有一个JsonWriter:
trait Base
case class Foo(a: Int) extends Base
case class Bar(a: Int, b: Int) extends Base
implicit val FooFormat = jsonFormat1(Foo)
implicit val BarFormat = jsonFormat2(Bar)
def go(o: Base) = {
o.toJson
}
Run Code Online (Sandbox Code Playgroud)
go不编译,因为有一个为基地没有JsonWriter,即使是对所有具体的子类型的作家.
如何重新组织此代码,以便Base使用适当的json格式化程序的通用函数?
python ×11
pandas ×4
numpy ×3
indexing ×2
nan ×2
performance ×2
pyqt4 ×2
coercion ×1
containment ×1
dataframe ×1
dyld ×1
enumeration ×1
identity ×1
implicit ×1
ipython ×1
mach-o ×1
macos ×1
matplotlib ×1
missing-data ×1
otool ×1
projection ×1
qicon ×1
qt ×1
qt4 ×1
scala ×1
spray-json ×1
tint ×1
traits ×1