我正在尝试根据某种格式(例如 MM/YYYY(获取用户的日期输入,我希望它循环运行,直到用户提供格式正确且在数据集日期范围内的输入。
我已经尝试了以下代码,但它似乎没有按我的预期工作。 抱歉,我是 Python 的新手,我不确定如何修改代码以达到我想要的结果。
import pandas as pd
from datetime import datetime
import numpy as np
date_rng = pd.date_range(start = '1/12/2016', end='01/08/2019', freq='M')
df = pd.DataFrame(date_rng, columns=['Date'])
df['Col1'] = np.random.randn(len(df['Date']))
df['Date'] = df['Date'].dt.strftime('%m/%Y')
is_Valid = False
while not is_Valid:
start_dt = input('Input start date between ' + df.iloc[0,0] + ' & ' + df.iloc[-1,0])
try:
ui = datetime.datetime.strptime(start_dt,'%m/%Y')
is_Valid = True
for dts in df['Date']:
if start_dt == dts:
print('OKAY')
else:
start_dt = input('Out of Range. Try Again.')
except:
print('Wrong Format. Try again')
我想你几乎在那里,只是检查一个小调整。可以在逻辑上将日期时间对象与范围进行比较。当然,如果您希望它继续循环,您可能需要重置is_Valid标志
import pandas as pd
import datetime as dt
import numpy as np
date_rng = pd.date_range(start = '1/12/2016', end='01/08/2019', freq='M')
df = pd.DataFrame(date_rng, columns=['Date'])
df['Col1'] = np.random.randn(len(df['Date']))
df['Date'] = df['Date'].dt.strftime('%m/%Y')
is_Valid = False
while not is_Valid:
start_dt = input('Input start date between ' + df.iloc[0,0] + ' & ' + df.iloc[-1,0] + ' - :')
try:
ui = dt.datetime.strptime(start_dt,'%m/%Y')
is_Valid = True
if (ui<=max(date_rng)) & (ui>=min(date_rng)):
print("Okay")
else:
start_dt = input('Out of Range. Try Again.')
is_Valid = False
except:
print('Wrong Format. Try again')
is_Valid = False