Python 如何从np.datetime64对象获取月份,而不使用pandas

Python 如何从np.datetime64对象获取月份,而不使用pandas,python,python-3.x,numpy,date,datetime,Python,Python 3.x,Numpy,Date,Datetime,我有一个这样的数组: dt64 = array(['1970-01-01', '1970-01-02', '1970-02-03', '1970-02-04', '1970-03-05', '1970-03-06', '1970-04-07', '1970-04-08', '1970-05-09', '1970-05-10', '1970-06-11', '1970-06-12', '1970-07-13', '1970-07-14'], dtype='dat

我有一个这样的数组:

dt64 = array(['1970-01-01', '1970-01-02', '1970-02-03', '1970-02-04',
      '1970-03-05', '1970-03-06', '1970-04-07', '1970-04-08',
      '1970-05-09', '1970-05-10', '1970-06-11', '1970-06-12',
      '1970-07-13', '1970-07-14'], dtype='datetime64[D]')
现在我想绘制一些与数组的单个元素相关联的数据。在我想使用matplotlib绘制的图中,我需要画一条线,它会在几个月内改变颜色

我想把三月到八月画成橙色,其余的画成蓝色

我想我得画两条线,一条橙色线,一条蓝色线

我现在的问题是,我很难将这些datetime64对象分割成一种返回月份的方式,以便将它们与所需月份进行比较

到目前为止,我已经:

将numpy导入为np
从matplotlib导入pyplot作为plt
def md_图(dt64=np.array,md=np.array):
“在Marsdistanz(y-Achse)和zur-Achse(x-Achse)之间绘制地图。”
plt.style.use('seaborn-whitegrid'))
y、 m,d=dt64.astype(int)//np.c_[[10000,100,1]]%np.c_[[10000,100,100]]
dt64=y.astype('U4')。astype('M8')+(m-1)。astype('M8[m]')+(d-1)。astype('M8[d]'))
plt.绘图(dt64,md,颜色为橙色,标签为Halbjahr der steigenden Temperature)
plt.绘图(dt64,md,颜色为蓝色,标签为Halbjahr der fallenden Temperaturen)
plt.xlabel(“Jahren中的Zeit\n”)
plt.xticks(旋转=45)
plt.ylabel(“AE中的Marsdistanz(1 AE=149.597.870,7 km)”)
plt.图(‘全球betrachtet…’)#迪森区块ggf。奥斯科明蒂伦酒店
#plt.style.use('seaborn-whitegrid'))
md_图(主数组[:,0],主数组[:,1])#图
plt.show()
plt.close()
这个想法似乎可行,但不适用于整个阵列:

[172]中的
dt64[0].astype(datetime.datetime).month
Out[172]:1

我真的尽量避免使用Pandas,因为我不想在有办法通过使用我已经在使用的模块来完成任务时,让我的脚本膨胀。我还读到它会降低速度。

如果我理解正确,这会做到:

[np.datetime64(i,'M') for i in dt64]

我的numpy版本可能有日期,但当我运行
np.datetime64(dt64[0])
时,我得到了numpy.datetime64('1970-01')

要仅获得一个月(如果这是您想要的),请尝试:

解决方案最适合我:

dt64[(dt64.astype('M8[M]')-dt64.astype('M8[Y]')).view(int)==2]


感谢Paul Panzer。

在中间步骤中转换为python
datetime

from datetime import datetime
import numpy as np

datestrings = np.array(["18930201", "19840404"])
months = np.array([datetime.strptime(d, "%Y%m%d").month for d in datestrings])

print(months)

# out: [2 4]

@Chistian这只生成一个datetime64对象列表,如python[numpy.datetime64('1895-09')、numpy.datetime64('1895-09')、numpy.datetime64('1895-09')、numpy.datetime64('1895-09')、…]我如何擦除年份,并使用结果进行比较,以找到我正在寻找的
dt64
切片?尽管我得到了以下信息:```` In[211]:int(np.datetime)as_string(dt64[0]).split('-')[1])==1 Out[211]:True``我无法从[221]:dt64[np.argwhere(int)中的
python数组中获取间隔(np.datetime作为字符串(dt64[i]).split('-')[1])==1[0,0],0]回溯(最近一次调用):文件“”,第1行,在dt64[np.argwhere(int(np.datetime作为字符串(dt64[i]).split('-')[1])==1[0,0],0]索引器:索引0超出轴0的范围,大小为0
from datetime import datetime
import numpy as np

datestrings = np.array(["18930201", "19840404"])
months = np.array([datetime.strptime(d, "%Y%m%d").month for d in datestrings])

print(months)

# out: [2 4]