【问题标题】:TypeError: object of type 'numpy.float64' has no len()TypeError:“numpy.float64”类型的对象没有 len()
【发布时间】:2018-08-26 09:31:57
【问题描述】:

我正在尝试计算比特币价格的资金流向指数。

为此,我使用了 gdax、pandas 和 pyti。

这是我的代码:

import gdax
import pandas as pd
from pyti.money_flow_index import money_flow_index as mfi

public_client = gdax.PublicClient()
historic = public_client.get_product_historic_rates('BTC-USD', granularity=60)
pd.set_option('display.max_rows', 30)
df = pd.DataFrame(historic)
df.columns = ['Time', 'Low', 'High', 'Open', 'Close', 'Volume']
df = df.head(n=30)

print(df, '\n')
close_data = df['Close'][0]
high_data = df['High'][0]
low_data = df['Low'][0]
volume_data = df['Volume'][0]
period = 14
print(mfi(close_data, high_data, low_data, volume_data, period))

这是我得到的错误:

Traceback (most recent call last):
  File "tiiii.py", line 18, in <module>
    print(mfi(close_data, high_data, low_data, volume_data, period))
  File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pyti\money_
flow_index.py", line 19, in money_flow_index
    close_data, high_data, low_data, volume
  File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pyti\catch_
errors.py", line 26, in check_for_input_len_diff
    arrays_len = [len(arr) for arr in args]
  File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pyti\catch_
errors.py", line 26, in <listcomp>
    arrays_len = [len(arr) for arr in args]
TypeError: object of type 'numpy.float64' has no len()

编辑: 好的,现在我正在使用:

close_data = df['Close']
high_data = df['High']
low_data = df['Low']
volume_data = df['Volume']

这就是我得到的:

            0
0         NaN
1         NaN
2         NaN
3         NaN
4         NaN
5         NaN
6         NaN
..        ...
23  97.914228
24  97.816960
25  96.440309
26  94.668462
27  94.340548
28  91.255057
29  87.706573

[30 rows x 1 columns]

我不明白值的顺序。还有为什么我没有得到完整的列表?

附:感谢 Rahul 和 timgeb 的帮助!

【问题讨论】:

  • 请不要在回答后将您的问题编辑为另一个问题。接受解决原始问题的答案,然后提出一个新问题(经过适当的研究和尝试)。
  • 希望我没有违反任何规则。我以为我在为原始问题添加更多细节。
  • 嗯,有时这是一个判断电话。我认为最初的问题是如何解决TypeError,并且您的新问题与解决TypeError 有很大不同,因此需要一个新帖子。
  • 很公平。但是您不认为再次发布几乎相同的代码毫无意义吗?

标签: python pandas dataframe technical-indicator


【解决方案1】:

我已经从pyti 模块中提取了函数。这就是您的代码在模块中实际执行的方式。

def money_flow_index (close_data, high_data, low_data, volume, period):
    check_for_input_len_diff(
        close_data, high_data, low_data, volume
    )

def check_for_input_len_diff(*args):
    arrays_len = [len(arr) for arr in args]

print(
    money_flow_index(
        close_data, high_data,
        low_data, volume_data, period
    )
)

所以money_flow_index 需要每个参数都为array。你提供numpy.float64

【讨论】:

    【解决方案2】:

    函数money_flow_index 调用check_for_input_len_diff 并在第26 行尝试累积您提供给money_flow_index 的参数close_data, high_data, low_data, volume 的长度(导入为mfi)时抛出错误。

    cmets 表明这些参数应该是数据集(或至少是具有长度的数据结构),但您提供了一个浮点数,它没有长度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-21
      • 2019-05-23
      • 2013-04-18
      • 2015-01-21
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多