Python 3.x 如果输入格式错误,则返回无效的函数
我编写了一个函数,可以读取数据帧,并将一周(1-7)转换为(周一到周日),将月份(1-12)转换为季节(夏天到春天),将时间(00:00:00-23:59:00)转换为(早上、下午、晚上、晚上) 注意:我已经完成了这个部分,我只需要添加代码来执行下面的操作 各列中都有包含“未知”的行。如果我的函数试图转换任何输入(日、月、时间)格式不正确(即它们包含未知)的行,则需要在所有输出中返回“无效”。我可以在现有代码中添加什么来实现这一点?我还需要能够过滤出这些无效的条目以后。任何帮助/建议都将不胜感激!谢谢Python 3.x 如果输入格式错误,则返回无效的函数,python-3.x,Python 3.x,我编写了一个函数,可以读取数据帧,并将一周(1-7)转换为(周一到周日),将月份(1-12)转换为季节(夏天到春天),将时间(00:00:00-23:59:00)转换为(早上、下午、晚上、晚上) 注意:我已经完成了这个部分,我只需要添加代码来执行下面的操作 各列中都有包含“未知”的行。如果我的函数试图转换任何输入(日、月、时间)格式不正确(即它们包含未知)的行,则需要在所有输出中返回“无效”。我可以在现有代码中添加什么来实现这一点?我还需要能够过滤出这些无效的条目以后。任何帮助/建议都将不胜感激
#function to convert month, day and time
import datetime
def compute_day_year(n):
Season = data.loc[n,'Crash_Month']
if 1 >= data.loc[n,'Crash_Month'] <= 2 or data.loc[n,'Crash_Month']== 12:
print('Summer')
elif 3 >= data.loc[n,'Crash_Month'] <=5:
print('Autumn')
elif 6 >= data.loc[n,'Crash_Month'] <=8:
print('Winter')
elif 9 >= data.loc[n,'Crash_Month'] <=11:
print('Spring')
DayWeek = data.loc[n,'Crash_Day']
if data.loc[n,'Crash_Day'] == 1:
print('Monday')
elif data.loc[n,'Crash_Day'] == 2:
print('Tuesday')
elif data.loc[n,'Crash_Day'] == 3:
print('Wednesday')
elif data.loc[n,'Crash_Day'] == 4:
print('Thursday')
elif data.loc[n,'Crash_Day'] == 5:
print('Friday')
elif data.loc[n,'Crash_Day'] == 6:
print('Saturday')
elif data.loc[n,'Crash_Day'] == 7:
print('Sunday')
TPDay = timeobj
if timeobj >= datetime.time(6,0,0) <=datetime.time(11,59,0):
print('Morning')
elif timeobj >= datetime.time(12,0,0) <=datetime.time(17,59,0):
print('Afternoon')
elif timeobj >= datetime.time(18,0,0) <=datetime.time(23,59,0):
print('Evening')
elif timeobj >= datetime.time(0,0,0) <=datetime.time(5,59,0):
print('Night')
#compute day year is the day/row to convert
compute_day_year(0)
#用于转换月、日和时间的函数
导入日期时间
def计算日年(n):
季节=数据.loc[n,'Crash\u Month']
如果1>=data.loc[n,'Crash\u Month']=data.loc[n,'Crash\u Month']=data.loc[n,'Crash\u Month']=datetime.time(6,0,0)=datetime.time(12,0,0)=datetime.time(18,0,0)=datetime.time(0,0)您可以将字符串添加到变量中,而不是直接打印所有内容。这将允许您在出现问题时将其设置为无效。
因此,每个print(text)
都应该替换为output+=text
。
别忘了加上
return output
在你的功能结束时
一些改进
使用字典或更简单的列表重写elif语句:
# this is a list which stores the days
days = ['Monday', etc.]
DayWeek = data.loc[n,'Crash_Day']
# this line checks you're giving a good argument (day 1-7)
if 0 < DayWeek <= 7:
# this gets the day at the given index
# -1 because lists start with the index 0, not 1
output += days[DayWeek - 1]
else:
# wrong arguments given
return "Invalid"
要么删除它,要么使用它
我真的很感谢你的反馈/帮助-我在编码方面的经验一般不到一个月(你可以肯定地说),所以我正在努力尽快学习。还有!你能解释一下你建议重写我的elif语句的代码块是怎么回事吗?如何/为什么这样做?请不要破坏你的帖子。
TPDay = timeobj
elif timeobj >= datetime.time(0,0,0) <= datetime.time(5,59,0):
elif datetime.time(0,0,0) <= timeobj < datetime.time(6,0,0):
# < 6 is the same as <= 5