我试图运行一个脚本来获取一些股票的数据。我试图获取的数据的一部分是流动性指标(称为Amihud流动性指标)。我自动化了脚本,但当运行自动化脚本时,我得到一个错误后,大约15-20成功的回报。我如何解决这个问题?
File "script.py", line 23, in <module>
return_data = function.get_data(row[1], row[0])
File "C:\Users\leon_\function.py", line 39, in get_data
print(np.nanmean(illiq))
File "D:\Anaconda3\lib\site-packages\numpy\lib\nanfunctions.py", line 916, in nanmean
avg = _divide_by_count(tot, cnt, out=out)
File "D:\Anaconda3\lib\site-packages\numpy\lib\nanfunctions.py", line 190, in _divide_by_count
return a.dtype.type(a / b)
AttributeError: 'int' object has no attribute 'dtype'
字符串
处理非流动性度量的代码部分:
# Amihuds Liquidity measure
liquidity_pricing_date = date_1 + datetime.timedelta(days=-20)
liquidity_pricing_date2 = date_1 + datetime.timedelta(days=-120)
stock_data = quandl.get(stock_ticker, start_date=liquidity_pricing_date2, end_date=liquidity_pricing_date)
p = np.array(stock_data['Adj. Close'])
returns = np.array(stock_data['Adj. Close'].pct_change())
dollar_volume = np.array(stock_data['Volume'] * p)
illiq = (np.divide(returns, dollar_volume))
print(np.nanmean(illiq))
illiquidity_measure = np.nanmean(illiq, dtype=float) * (10 ** 6) # multiply by 10^6 for expositional purposes
return [stock_vola, stock_price_average, illiquidity_measure]
型
有人知道怎么解决这个问题吗?
编辑:这是脚本文件
# Open File Dialog
root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename()
# Load Spreadsheet data
f = open(file_path)
csv_f = csv.reader(f)
next(csv_f)
result_data = []
# Iterate
for row in csv_f:
return_data = function.get_data(row[1], row[0])
if len(return_data) != 0:
# print(return_data)
result_data_loc = [row[1], row[0]]
result_data_loc.extend(return_data)
result_data.append(result_data_loc)
if result_data is not None:
with open('resuls.csv', mode='w', newline='') as result_file:
csv_writer = csv.writer(result_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
for result in result_data:
# print(result)
csv_writer.writerow(result)
else:
print("No results found!")
型
3条答案
按热度按时间ohtdti5x1#
字符串
c6ubokkw2#
因此,根据追溯(谢天谢地,我们不必要求),错误发生在:
字符串
在这里,它试图调整返回值以匹配输入的
dtype
,可能是illiq
。(查看其代码)它已对输入求和(在移除nan
之后),tot
,假设illiq
是一个数字numpy
数组(最好是float
dtype,因为它必须处理浮点数np.nan
)。所以它在大多数情况下都能工作,但在某些情况下会失败。在这些情况下,
illiq
有什么不同?型
看起来
stock_data
是一个dataframe
,输入是从单个series
派生的数组。我相信stock_data[name].to_num()
是从Series中获取数组的首选方式,尽管np.array(...)
可能在大多数情况下都能工作。stock_data[name].values
也被使用过。我建议在这次调用之前对
illiq
进行一些测试。至少检查shape
和dtype
。尝试识别问题案例中的不同之处。下面是一个产生此错误的简单案例:
型
pandas
经常在一个或多个值不是有效数字时创建对象dtype Series。这可以包括字符串和None
值。gmxoilav3#
简单的答案是,你的数据不是numpy数据类型。这可能是因为列不是完全数字的(即包含None或其他)。
简短的解决方案:
字符串
解决这个问题的最快方法是简单地将数据强制转换为numpy喜欢的数值类型。这可以通过pandas的
to_numeric
方法完成。