ufunc 的到期循环中的错误不支持 str 类型的参数 0,该参数没有可调用的 log 方法

Kar*_*ika 3 python time-series

当我使用下面的日志函数时,我在 jupyter 笔记本中收到以下错误消息。data1 = np.log(mdata).diff().dropna() 我尝试进行强制转换但无法摆脱这个问题。-------------------------------------------------- ------------------------- AttributeError Traceback(最近一次调用最后) AttributeError:'str'对象没有属性'log'

The above exception was the direct cause of the following exception:

TypeError                                 Traceback (most recent call last)
<ipython-input-13-b6f1878a7619> in <module>
----> 1 data1 = np.log(mdata).diff().dropna()

TypeError: loop of ufunc does not support argument 0 of type str which has no callable log method
Run Code Online (Sandbox Code Playgroud)

元数据:

          Field1    Field2  Field3  Field4
TS              
2020-11-02 00:43:58.500 1595000 849332  205 69
2020-11-02 00:43:58.500 1408000 820332  198 51
2020-11-02 00:43:58.500 1770000 926054  213 56
2020-11-02 00:43:58.500 1760000 1002332 216 72
2020-11-02 00:43:58.500 1850000 957054  213 59
... ... ... ... ...
 
Run Code Online (Sandbox Code Playgroud)

mdata.index:

DatetimeIndex(['2020-11-02 00:43:58.500000', '2020-11-02 00:43:58.500000',
               '2020-11-02 00:43:58.500000', '2020-11-02 00:43:58.500000',
               '2020-11-02 00:43:58.500000', '2020-11-02 00:43:58.500000',
               '2020-11-02 00:43:58.500000', '2020-11-02 00:43:58.500000',
               '2020-11-02 00:43:58.600000', '2020-11-02 00:43:58.600000',
               ...

               '2020-11-02 00:44:00.400000', '2020-11-02 00:44:00.500000'],
              dtype='datetime64[ns]', name='TS', length=199, freq=None)
Run Code Online (Sandbox Code Playgroud)

完整代码是

df1 = pd.read_csv('inputdata.csv')
cols = ['Field1','Field2','Field3','Field4'] 
data_x = pd.to_datetime(data_x)
mdata = df1[cols]
mdata.index = pd.DatetimeIndex(data_x)
data1 = np.log(mdata).diff().dropna()

The following statements are not executed due to the issue in the above statement

model = VAR(data)
results = model.fit(2)
results.summary()
Run Code Online (Sandbox Code Playgroud)

Cra*_*aig 5

问题是您的数据列不是数字类型,并且numpy.log()需要数字数据。您可以使用将数据转换为数值pandas.to_numeric()

mdata = df1[cols].apply(pd.to_numeric)
Run Code Online (Sandbox Code Playgroud)

或者通过使用将列转换为特定的数字类型DataFrame.astype()

mdata = df1[cols].astype(float)
Run Code Online (Sandbox Code Playgroud)