背景:

我想在给定行长的元素中切片pandas数据框,并对它们执行计算。

pandas.DataFrame.rolling将允许我执行此操作,但似乎仅使用示例sum()中的df.rolling(2, win_type='triang').sum()之类的内置函数。我还想绘制这些子集(我可以通过切片和一些For循环来做到这一点,但是有点慢)。

我发现了什么:

How can I get the source code of a Python function?中学到,我可以使用pandas.DataFrame.rolling??读取源代码,这会给我以下信息:

python - 是否可以从pandas库中读取源代码并将其用于我自己的函数中?-LMLPHP

但是尝试使用例如rolling??从此处进行更深入的挖掘似乎是徒劳的:

python - 是否可以从pandas库中读取源代码并将其用于我自己的函数中?-LMLPHP

因此,是否有可能以某种方式引用pandas.DataFrame.rolling的底层函数,或者这是使用Python结束的地方?我猜是这样,因为docs指出熊猫是用Cython或C编写的,但是我对此真的很好奇,所以我也想在此问一下。

感谢您的任何建议!

最佳答案

好/坏消息:您的苦难并没有到此为止。

[边注]
不容易找到源代码在系统中的位置,尤其是在使用诸如Anaconda之类的额外图层时。
如有疑问,可以在交互式外壳程序中检查__file__属性:

import pandas
pandas.__file__
>>> 'C:\\Users\\xy\\AppData\\Local\\Continuum\\Anaconda3\\lib\\site-packages\\pandas\\__init__.py'


[/边注]

如果您查找该实际代码段,它来自pandas / core / generic.py中的NDFrame,并且在其前面有一个导入行:

from pandas.core import window as rwindow

@Appender(rwindow.rolling.__doc__)
def rolling(self, window, min_periods=None, freq=None, center=False,
            win_type=None, on=None, axis=0, closed=None):
    axis = self._get_axis_number(axis)
    return rwindow.rolling(self, window=window,
                           min_periods=min_periods, freq=freq,
                           center=center, win_type=win_type,
                           on=on, axis=axis, closed=closed)


因此,您的冒险将继续在pandas / core / window.py中进行,其中rolling位于末尾:

def rolling(obj, win_type=None, **kwds):
    from pandas import Series, DataFrame
    if not isinstance(obj, (Series, DataFrame)):
        raise TypeError('invalid type: %s' % type(obj))

    if win_type is not None:
        return Window(obj, win_type=win_type, **kwds)

    return Rolling(obj, **kwds)


所有WindowRolling和它们的父类(_Window_Rolling_and_Expanding_Rolling-该类也来自_Window)都在同一文件中扩展了数千行。

关于python - 是否可以从pandas库中读取源代码并将其用于我自己的函数中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48381085/

10-12 18:16