【问题标题】:Using functions from modules in pandas dataframe在 pandas 数据框中使用模块中的函数
【发布时间】:2016-10-22 18:49:56
【问题描述】:

我有以下数据框:

            Open     High     Low   Close
Date                
2000-02-01  6841.12 7052.22 6841.12 7050.46
2000-02-02  7063.57 7172.05 7038.71 7171.95
2000-02-03  7175.87 7354.56 7134.42 7354.26

我想使用来自不同模块的函数。假设我将模块称为TA.py。在这个模块中,我输入以下函数:

def pan1(val):
    return val > val.shift(1)

现在,我想应用这个函数在数据框中创建一个新列:

import TA as TA

df['signal'] = np.where(TA.pan1(df.High),'Yes', 'No')

我收到模块“TA”没有属性“pan1”的错误消息。

我怎样才能重建它正在工作的东西(通过保持一个模块灵魂)?如果我在同一个脚本(没有模块)中使用相同的函数,它就可以工作。

编辑:如 cmets 中所述,TA.py 中还有其他功能,我可以毫无问题地导入。但是这个函数pan1 在当前设置中似乎是错误的或不可用的。因此,欢迎任何提示我应该做些什么不同的事情。

【问题讨论】:

  • 如果用from TA import pan1 as TA_pan1 代替import TA as TA,然后像np.where(TA_pan1(df.High),'Yes', 'No') 一样使用它会发生什么?
  • @BorrajaX,出现错误:无法导入名称'pan1'
  • 这很奇怪,我可能帮不上什么忙,但是……也许还有另一个 TA 模块?你可以试试这个(在两个不同的行):import TA print TA.__file__ 看看TA 的路径是否指向你真正想要导入的TA:-S 可能不会是这样,不过……抱歉,我帮不上忙
  • @BorrajaX,我可以从同一个 TA 模块导入和应用其他功能。因此我假设函数 pan1 的构造方式在模块中不起作用。但我该怎么做?
  • 有两个可能的原因:(1)python 解释器严重损坏,(2)你的模块做错了。我的赌注是(2)。 FWIW 你在这里写的函数很好,我可以把它放到一个模块中,然后从另一个模块导入。

标签: python pandas dataframe module


【解决方案1】:

我将此作为可能的解决方案发布,尽管它应该更多是评论。我遇到了完全相同的错误消息的相同问题。问题很平常:我忘记保存模块(在我添加了“有问题的”功能之后)。所以我保存了模块,我再次导入它,一切正常。

【讨论】:

  • 欢迎来到 SO!请发布实际答案,以便您获得更多代表并在未来发表评论。不要发布您知道是 cmets 的“答案”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
相关资源
最近更新 更多