我编写了一些代码来检查数据帧(一次一行)的三列(Crash_Month,Crash_Day和Crash_Time)的值,然后根据每个单元格的值将相应的值打印为由代码定义。但是,我回到了代码中,所有的if / elif语句似乎都没有起作用,并且我的代码现在打印出未转换的值,而不是这些值的对应值。我怎样才能解决这个问题?有什么问题感谢您的帮助,我将在下面插入代码
#Compute day year function
import pandas as pd
import datetime
data = pd.read_csv('road_accidents_data_clean.csv',delimiter=',')
df = pd.DataFrame(data)
#----------------------------------------------
#n is the row which you wish to convert
n = 0
#----------------------------------------------
ctime = datetime.datetime.strptime(c,'%H:%M:%S').time()
Season = data.loc[n,'Crash_Month']
DayWeek = data.loc[n,'Crash_Day']
TPDay = data.loc[n,'Crash_Time']
def compute_day_year(Season,DayWeek,TPDay):
Season = data.loc[n,'Crash_Month']
for (i, item) in enumerate(Season):
if item >= 1 <= 2:
Season[i] = 'Summer'
elif item >= 3 <= 6:
Season[i] = 'Autumn'
elif item >= 6 <= 9:
Season[i] = 'Winter'
elif item >= 9 <= 11:
Season[i] = 'Spring'
elif item == 12:
Season[i] = 'Summer'
if not item in range(1, 12):
Season[i] = 'INVALID'
DayWeek[i] = 'INVALID'
TPDay[i] = 'INVALID'
DayWeek = data.loc[n,'Crash_Day']
for (i, item) in enumerate(DayWeek):
if item == 1:
DayWeek[i] = 'Monday'
elif item == 2:
DayWeek[i] = 'Tuesday'
elif item == 3:
DayWeek[i] = 'Wednesday'
elif item == 4:
DayWeek[i] = 'Thursday'
elif item == 5:
DayWeek[i] = 'Friday'
elif item == 6:
DayWeek[i] = 'Saturday'
elif item == 7:
DayWeek[i] = 'Sunday'
if not item in range(1, 7):
Season[i] = 'INVALID'
DayWeek[i] = 'INVALID'
TPDay[i] = 'INVALID'
TPDay = data.loc[n,'Crash_Time']
for (i, item) in enumerate(TPDay):
if datetime.time(6,0,0) <= ctime <= datetime.time(11,59,0):
TPDay[i] = 'Morning'
elif datetime.time(12,0,0) <= ctime <= datetime.time(17,59,0):
TPDay[i] = 'Afternoon'
elif datetime.time(18,0,0) <= ctime <= datetime.time(23,59,0):
TPDay[i] = 'Evening'
elif datetime.time(0,0,0) <= ctime <= datetime.time(5,59,0):
TPDay[i] = 'Night'
print(Season, DayWeek, TPDay)
答案 0 :(得分:1)
对于初学者来说,所有这些条件都是错误的:
if item >= 1 <= 2:
以上等同于item >= 1 and 1 <= 2
,即item >= 1
。我相信您真的要写:
if 1 <= item <= 2:
...转换为item >= 1 and item <= 2
,而那是您要表达的意思。
答案 1 :(得分:0)
有3个问题:
3,来自评论:
调用该函数(键入compute_day_year)会产生以下结果:我需要怎么做才能使其返回已转换的值?
调用=用参数添加括号。 ;)
2:有两个选项:
return Season, Dayweek, TPDay
(注意缩进-它应该在函数中,但不要在函数的末尾,因此只有一个制表符/一组,每组4个空格);调用函数时,保存结果def compute_day_year(Season,DayWeek,TPDay)
-> def compute_day_year()
)并将global Season, DayWeek, TPDay
添加为函数的第一行。一般来说,第一个选项更可取,但似乎您想做第二个-您认为您正在处理完全相同的对象。
但是:无论如何,您永远不会使用这些参数的原始值,而是始终将其覆盖。因此,真正的解决方法是:删除函数上方的变量声明,删除参数列表,返回结果
1:Óscar已经解释了。
#Compute day year function
import pandas as pd
import datetime
data = pd.read_csv('road_accidents_data_clean.csv',delimiter=',')
df = pd.DataFrame(data)
#----------------------------------------------
#n is the row which you wish to convert
n = 0
#----------------------------------------------
ctime = datetime.datetime.strptime(c,'%H:%M:%S').time()
#no declaration here
def compute_day_year(): # no parameter list here - you only use data object to get the desired values
Season = data.loc[n,'Crash_Month']
for (i, item) in enumerate(Season):
if 1 <= item <= 2: #fix 1
Season[i] = 'Summer'
elif 3 <= item <= 6:
Season[i] = 'Autumn'
elif 6 <= item <= 9:
Season[i] = 'Winter'
elif 9 <= item <= 11:
Season[i] = 'Spring'
elif item == 12:
Season[i] = 'Summer'
if not item in range(1, 12):
Season[i] = 'INVALID'
DayWeek[i] = 'INVALID'
TPDay[i] = 'INVALID'
DayWeek = data.loc[n,'Crash_Day']
for (i, item) in enumerate(DayWeek):
if item == 1:
DayWeek[i] = 'Monday'
elif item == 2:
DayWeek[i] = 'Tuesday'
elif item == 3:
DayWeek[i] = 'Wednesday'
elif item == 4:
DayWeek[i] = 'Thursday'
elif item == 5:
DayWeek[i] = 'Friday'
elif item == 6:
DayWeek[i] = 'Saturday'
elif item == 7:
DayWeek[i] = 'Sunday'
if not item in range(1, 7):
Season[i] = 'INVALID'
DayWeek[i] = 'INVALID'
TPDay[i] = 'INVALID'
TPDay = data.loc[n,'Crash_Time']
for (i, item) in enumerate(TPDay):
if datetime.time(6,0,0) <= ctime <= datetime.time(11,59,0):
TPDay[i] = 'Morning'
elif datetime.time(12,0,0) <= ctime <= datetime.time(17,59,0):
TPDay[i] = 'Afternoon'
elif datetime.time(18,0,0) <= ctime <= datetime.time(23,59,0):
TPDay[i] = 'Evening'
elif datetime.time(0,0,0) <= ctime <= datetime.time(5,59,0):
TPDay[i] = 'Night'
return Season, DayWeek, TPDay
Season, DayWeek, TPDay = compute_day_year()
print(Season, DayWeek, TPDay)