我已经使用Pandas编写了一种算法,该算法围绕修改原始数据帧并评估以下几种条件而构建:
df.loc[df.a < df.a.shift(2), 'c1' ] = 1
df.loc[df.b > df.b.shift(2), 'c2' ] = 2
...
df.loc[df.c1 < df.c1.shift(1), 'c3' ] = 0
df.loc[df.c2 > df.c2.shift(1), 'c4' ] = 2
...
Profiling using snakeviz 1/2 Profiling using snakeviz 2/2
此配置文件表明40%的时间都花在了 str 上,这对完成的工作而言似乎太过分了。当查看被调用的代码时,似乎我在代码上进行处理以解决python 2.X和3.X之间的兼容性问题。
class StringMixin(object):
"""implements string methods so long as object defines a `__unicode__`
method.
Handles Python2/3 compatibility transparently.
"""
# side note - this could be made into a metaclass if more than one
# object needs
# ----------------------------------------------------------------------
# Formatting
def __unicode__(self):
raise AbstractMethodError(self)
def __str__(self):
"""
Return a string representation for a particular Object
Invoked by str(df) in both py2/py3.
Yields Bytestring in Py2, Unicode String in py3.
"""
if compat.PY3:
return self.__unicode__()
return self.__bytes__()
我正在寻找一种避免在数据框上使用'.loc'语句时过度使用 str 的方法。任何想法/指针都将受到欢迎!