TypeError:ufunc add无法使用类型为dtype('<M8 [ns]')和dtype('<M8 [ns]')的操作数

时间:2019-06-18 21:30:40

标签: pandas numpy matplotlib arcpy

我试图为某些数据设置ARIMA模型,为此,我在时间序列中使用了“ autocorrelation_plot()”。但是会产生标题错误。

我有一个属性表,其中包括日期和时间字段。 我提取了它们(将属性表转换为numpy表之后),将它们放在“ datetime”变量中,并将它们全部添加到列表中:


   O,A = [],[]
   dt = datetime.strptime(dt1, "%Y/%m/%d %H:%M")
   A.append(dt)

然后我尝试创建时间序列并打印它们以确保结果确定:


   data2 = pd.Series(A, O)
   print data2

结果令人满意,直到我决定自动相关:

自相关命令:


autocorrelation_plot(data2)

此命令后,它返回:

  

TypeError:ufunc add无法使用类型为dtype('M8 [ns]')和dtype('M8 [ns]')的操作数

我想这是由于datetime.strptime转换为numpy吗? 我试图听从先前问题的一些建议 index.to_pydatetime() dtype, M8[ns] error ...,是徒劳的。

最小的可复制示例:


  from pandas import datetime
  from pandas import DataFrame
  import pandas as pd
  from matplotlib import pyplot as plt
  from pandas.tools.plotting import autocorrelation_plot

  arr = arcpy.da.TableToNumPyArray(inTable ,("PROVINCE","ZONE_CODE","MEAN", "Datetime","Time"))
  arr_length = len(arr)
  j = 1
  O,A = [],[]
  while j<=55: #I have 55 provinces
       i = 0
       while i<arr_length:
           if arr[i][1]== j:
               O.append(arr[i][2])
               c = str(arr[i][3])
               d = str(c[0:4]+"/"+c[5:7]+"/"+c[8:10])
               t = str(arr[i][4])
               if t=="10":
                   dt1 = str(d+" 10:00")
               else:
                   dt1 = str(d+" 14:00")
               dt = datetime.strptime(dt1, "%Y/%m/%d %H:%M")

               A.append(dt)
           i = i+1
       data2 = pd.Series(A, O)
       print data2
       autocorrelation_plot(data2)
       del A[:]
       del O[:]
       j += 1


结果截图: results

2 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,它看起来很野蛮,但是有效!

我刚刚用我拥有的 pd.Series “取消了” pd.Series()

data2 = pd.Series(O, A)
autocorrelation_plot(pd.Series(data2))
plt.show()

答案 1 :(得分:0)

我用它来解决我的问题:

import matplotlib.dates as mpl_dates
df.reset_index(inplace=True)
df['Date']=df['Date'].apply(mpl_dates.date2num)
df = df.astype(float)