我有一个数据框,并取其第一行。
df = pd.DataFrame({'Date': ['2019-01-02', '2019-01-03', '2019-01-04', '01/07/2019', '01/08/2019', '01/09/2019', '01/10/2019', '01/11/2019', '01/14/2019', '24/08/2019']})
df['Date'] = pd.to_datetime(df["Date"])
a = df['Date'].iloc[0]
我正在尝试遍历df ['Date']以仅包括工作日。如果使用带有通行证的If语句,那么在周末将不给出任何结果。我现在正在尝试使用需要循环的继续。但是,每次循环浏览时,都会得到TypeError:“ Timestamp”对象不可迭代
def weekday_end(day_now):
d = day_now
for row in d:
if d.isoweekday()==6:
continue
elif d.isoweekday()==7:
continue
else:
return d
for rows in a:
df = weekday_end(rows)
print (df)
答案 0 :(得分:2)
您正在尝试遍历单个值,在此您需要整个列。可以通过删除.iloc[0]
来解决此问题:
a = df['Date']
那仍然不能让您的代码正常工作,因为您的weekday_end()
函数本身将尝试再次遍历单个值,您只需要使用:
for value in a:
if value.weekday < 6:
print(value)
但是,使用向量化操作要更快:
df['Date'][df['Date'].dt.weekday < 6]
这会产生一系列的工作日时间戳记。如果要基于工作日选择数据框中的行,请将过滤器应用于整个数据框:
df[df['Date'].dt.weekday < 6]