我正在尝试从熊猫数据框中提取的日期范围;下面的示例。
下面的代码最初引发以下错误
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
变量中包含的日期列表?
答案 0 :(得分:1)
for d in dates
将依次向每个日期分配d
; for 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: