Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 可以从pandas库中读取源代码并在我自己的函数中使用吗?_Python_Pandas - Fatal编程技术网

Python 可以从pandas库中读取源代码并在我自己的函数中使用吗?

Python 可以从pandas库中读取源代码并在我自己的函数中使用吗?,python,pandas,Python,Pandas,背景: 我想在给定行长度的元素中分割数据帧,并对其执行计算 将允许我这样做,但似乎只使用内置函数,如示例中的df.rolling(2,win_type='triangs').sum()。我还想绘制这些子集(我可以通过切片和一些For循环来完成,但速度有点慢) 我的发现: 从中我了解到,我可以使用pandas.DataFrame.rolling???阅读源代码,这将给我以下信息: 但尝试从这里更深入地挖掘,例如使用rolling???似乎是徒劳的: 那么,是否可以以某种方式引用pandas.D

背景

我想在给定行长度的元素中分割数据帧,并对其执行计算

将允许我这样做,但似乎只使用内置函数,如示例中的
df.rolling(2,win_type='triangs').sum()
。我还想绘制这些子集(我可以通过切片和一些For循环来完成,但速度有点慢)

我的发现:

从中我了解到,我可以使用
pandas.DataFrame.rolling???
阅读源代码,这将给我以下信息:

但尝试从这里更深入地挖掘,例如使用
rolling???
似乎是徒劳的:

那么,是否可以以某种方式引用
pandas.DataFrame.rolling
的底层函数,或者使用Python就到此为止?我想是的,因为熊猫是用Cython或C写的,但我真的很好奇,所以我也想在这里问一下


谢谢你的建议

熊猫源代码是开源的,目前可在GitHub上获得,网址为:

您还可以在这里查看贡献者指南,了解代码的布局:

在文档中有指向文档所指代码的链接(如下图所示)


这不是关于如何阅读源代码的答案,而是关于如何解决所述问题的答案:

使用。例如,尝试
df.rolling(2,win_type='trina').apply(yourfunc,args=(),kwargs={})

从文件中,你的职责

必须从ndarray输入*args和**kwargs生成单个值 传递给函数


这是更好的方法,因为如果不是真的需要的话,您不应该使用pandas源代码并在代码中复制粘贴和编辑它(有一些错误修复,它可能在一段时间内过时,等等)。在这里,我们有可能使用已经实现的自己的函数。

好消息/坏消息:你的痛苦并没有就此结束

[旁注]
很容易找不到源代码在系统中的位置,特别是如果使用像Anaconda这样的附加层。
当有疑问时,您可以在交互式shell中检查
\uuuu文件\uuuuuu
属性:

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中进行,
滚动
就在最后的某个地方:

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)

所有的
窗口
滚动
,以及它们的父类(
\u窗口
\u滚动和扩展
\u滚动
——这一个也来自
\u窗口
)在同一个文件中延伸了数千行。复制粘贴…我认为没有办法从
获取输出,因为这只是IPython语法,在实际程序中不可用。Github是开源的。这里有其他有用的链接:谢谢!我一定会用的!伟大的如果这能满足您的需求,请考虑接受它作为答案!:)@尼科·阿尔伯斯。尽管您的建议是创建数据帧滚动窗口的一个很好的方法,但我恐怕它不能直接回答标题中所述的问题。据我所知,在这方面还有其他建议。但我绝对支持你!再次感谢你!