迭代数个日期数组

时间:2018-11-03 00:26:41

标签: python python-3.x pandas numpy

我正在尝试从熊猫数据框中提取的日期范围;下面的示例。

enter image description here

下面的代码最初引发以下错误

  

TypeError:“ numpy.datetime64”对象不可迭代

r1 = pd.read_sql("select * from myTable",conn)    
...

dates = np.sort(r1['date'].unique())       

for i, d in dates:

   z_d = z[z['date']==d]
   r1_d = r1[r1['date']==d]
...

在谷歌搜索之后,我尝试应用iditer numpy方法,但这样做会出现以下错误:

  

TypeError:在0维数组上迭代

 r1 = pd.read_sql("select * from myTable",conn)    
 ...

 dates = np.sort(r1['date'].unique())       

 for i, d in np.nditer(dates):

    z_d = z[z['date']==d]
    r1_d = r1[r1['date']==d]
 ...

如何进行修改以遍历dates变量中包含的日期列表?

2 个答案:

答案 0 :(得分:1)

for d in dates将依次向每个日期分配dfor i,d in dates不起作用,因为您不能为两个变量赋一个日期值(它基本上是在尝试i,d = dates[0]等)。如果您还想要索引,Python不会给您它的for循环免费提供;您必须使用enumerate函数在每个项目的索引前添加索引,然后遍历该结果:for i,d in enumerate(dates):。幸运的是,enumerate返回了一个惰性迭代器,因此效率很高。它不会首先生成所有索引。但是您将获得与输出相同的输出,并且可以用list(enumerate(dates))看到该结果,它将返回类似[(0,'first-date'), (1, 'second-date'), ...]的结果。这样分配就变成了i, d = (0, 'first-date'),依此类推。

答案 1 :(得分:0)

您的for循环有两个变量,因此期望数组元素有两个输入。错误是因为它试图解析或迭代字符串。更改为

for d in dates: