背景:
我想在给定行长的元素中切片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??
读取源代码,这会给我以下信息:
但是尝试使用例如rolling??
从此处进行更深入的挖掘似乎是徒劳的:
因此,是否有可能以某种方式引用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)
所有
Window
,Rolling
和它们的父类(_Window
,_Rolling_and_Expanding
,_Rolling
-该类也来自_Window
)都在同一文件中扩展了数千行。关于python - 是否可以从pandas库中读取源代码并将其用于我自己的函数中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48381085/