首页 > 解决方案 > Numpy 日志计算

问题描述

我正在尝试计算两个时间序列的日志回报。我已将 numpy 作为 np 导入并编写了以下代码:

# Calculate the Log Returns

stocks_data_log = np.log(stocks_data / stocks_data.shift(1))
stocks_data_log.head()

不幸的是,我收到以下(永无止境的)错误消息。

# Calculate the Log Returns

stocks_data_log = np.log(stocks_data / stocks_data.shift(1))
stocks_data_log.head()
1
# Calculate the Log Returns
2
​
3
stocks_data_log = np.log(stocks_data / stocks_data.shift(1))
4
stocks_data_log.head()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
~\anaconda3\lib\site-packages\pandas\core\ops\array_ops.py in na_arithmetic_op(left, right, op, str_rep)
    148     try:
--> 149         result = expressions.evaluate(op, str_rep, left, right)
    150     except TypeError:

~\anaconda3\lib\site-packages\pandas\core\computation\expressions.py in evaluate(op, op_str, a, b, use_numexpr)
    207     if use_numexpr:
--> 208         return _evaluate(op, op_str, a, b)
    209     return _evaluate_standard(op, op_str, a, b)

~\anaconda3\lib\site-packages\pandas\core\computation\expressions.py in _evaluate_numexpr(op, op_str, a, b)
    120     if result is None:
--> 121         result = _evaluate_standard(op, op_str, a, b)
    122 

~\anaconda3\lib\site-packages\pandas\core\computation\expressions.py in _evaluate_standard(op, op_str, a, b)
     69     with np.errstate(all="ignore"):
---> 70         return op(a, b)
     71 

TypeError: unsupported operand type(s) for /: 'str' and 'float'

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
<ipython-input-62-5c8fcb5cdb27> in <module>
      1 # Calculate the Log Returns
      2 
----> 3 stocks_data_log = np.log(stocks_data / stocks_data.shift(1))
      4 stocks_data_log.head()

~\anaconda3\lib\site-packages\pandas\core\ops\__init__.py in f(self, other, axis, level, fill_value)
    701 
    702             left, right = self.align(other, join="outer", level=level, copy=False)
--> 703             new_data = left._combine_frame(right, pass_op, fill_value)
    704             return left._construct_result(new_data)
    705 

~\anaconda3\lib\site-packages\pandas\core\frame.py in _combine_frame(self, other, func, fill_value, level)
   5298         if ops.should_series_dispatch(self, other, func):
   5299             # iterate over columns
-> 5300             new_data = ops.dispatch_to_series(self, other, _arith_op)
   5301         else:
   5302             with np.errstate(all="ignore"):

~\anaconda3\lib\site-packages\pandas\core\ops\__init__.py in dispatch_to_series(left, right, func, str_rep, axis)
    414         raise NotImplementedError(right)
    415 
--> 416     new_data = expressions.evaluate(column_op, str_rep, left, right)
    417     return new_data
    418 

~\anaconda3\lib\site-packages\pandas\core\computation\expressions.py in evaluate(op, op_str, a, b, use_numexpr)
    206     use_numexpr = use_numexpr and _bool_arith_check(op_str, a, b)
    207     if use_numexpr:
--> 208         return _evaluate(op, op_str, a, b)
    209     return _evaluate_standard(op, op_str, a, b)
    210 

~\anaconda3\lib\site-packages\pandas\core\computation\expressions.py in _evaluate_numexpr(op, op_str, a, b)
    119 
    120     if result is None:
--> 121         result = _evaluate_standard(op, op_str, a, b)
    122 
    123     return result

~\anaconda3\lib\site-packages\pandas\core\computation\expressions.py in _evaluate_standard(op, op_str, a, b)
     68         _store_test_result(False)
     69     with np.errstate(all="ignore"):
---> 70         return op(a, b)
     71 
     72 

~\anaconda3\lib\site-packages\pandas\core\ops\__init__.py in column_op(a, b)
    383 
    384         def column_op(a, b):
--> 385             return {i: func(a.iloc[:, i], b.iloc[:, i]) for i in range(len(a.columns))}
    386 
    387     elif isinstance(right, ABCSeries) and axis == "columns":

~\anaconda3\lib\site-packages\pandas\core\ops\__init__.py in <dictcomp>(.0)
    383 
    384         def column_op(a, b):
--> 385             return {i: func(a.iloc[:, i], b.iloc[:, i]) for i in range(len(a.columns))}
    386 
    387     elif isinstance(right, ABCSeries) and axis == "columns":

~\anaconda3\lib\site-packages\pandas\core\ops\common.py in new_method(self, other)
     62         other = item_from_zerodim(other)
     63 
---> 64         return method(self, other)
     65 
     66     return new_method

~\anaconda3\lib\site-packages\pandas\core\ops\__init__.py in wrapper(left, right)
    498         lvalues = extract_array(left, extract_numpy=True)
    499         rvalues = extract_array(right, extract_numpy=True)
--> 500         result = arithmetic_op(lvalues, rvalues, op, str_rep)
    501 
    502         return _construct_result(left, result, index=left.index, name=res_name)

~\anaconda3\lib\site-packages\pandas\core\ops\array_ops.py in arithmetic_op(left, right, op, str_rep)
    195     else:
    196         with np.errstate(all="ignore"):
--> 197             res_values = na_arithmetic_op(lvalues, rvalues, op, str_rep)
    198 
    199     return res_values

~\anaconda3\lib\site-packages\pandas\core\ops\array_ops.py in na_arithmetic_op(left, right, op, str_rep)
    149         result = expressions.evaluate(op, str_rep, left, right)
    150     except TypeError:
--> 151         result = masked_arith_op(left, right, op)
    152 
    153     return missing.dispatch_fill_zeros(op, left, right, result)

~\anaconda3\lib\site-packages\pandas\core\ops\array_ops.py in masked_arith_op(x, y, op)
     92         if mask.any():
     93             with np.errstate(all="ignore"):
---> 94                 result[mask] = op(xrav[mask], yrav[mask])
     95 
     96     else:

TypeError: unsupported operand type(s) for /: 'str' and 'str'

有谁知道我做错了什么?


这里是整个脚本

import quandl
import pandas as pd
import numpy as np
import statsmodels.formula.api as sm
from scipy import stats
import matplotlib.pyplot as plt
import matplotlib

# Load ABB Data
ABB = pd.read_csv('C:/Users/Startklar/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Anaconda3 (64-bit)/ABB.csv',sep=";",names=['Datum','ABBN_Preis'])
Roche = pd.read_csv('C:/Users/Startklar/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Anaconda3 (64-bit)/Roche.csv',sep=";", names=['ROG_Datum','ROG_Preis'])
Roche.head(10)

# Concatenate the different dataframes

stocks_data = pd.concat([ABB,Roche], axis=1)
stocks_data.head()

stocks_data['Datum'] = pd.to_datetime(stocks_data['Datum'])
stocks_data.head()

# Kick out the Dates

stocks_data = stocks_data.loc[:,['Datum','ABBN_Preis','ROG_Preis']]
stocks_data.head()

# Compute Log Returns

stocks_data_log = np.log(stocks_data / stocks_data.shift(1))
stocks_data_log.head()

标签: pythonnumpy

解决方案


根据日志,您似乎正在尝试对字符串或浮点列执行 / 操作。目前尚不清楚帖子中的stocks_data 是什么。


推荐阅读