如何使用 if 语句遍历可变数据类型以删除除以零
how to use if statement for iterating through mutable datatypes to remove dividing by zero
我正在分析 FreeCodeCamp 2016 年的调查数据。 https://github.com/freeCodeCamp/2016-new-coder-survey
特别是 2016-new-coder-survey/clean-data/2016-FCC-New-Coders-Survey-Data.csv
我通过将净推荐量(差异)除以每个 x 值(年龄)的总数(#sum of recommendations)来标准化绘图。
几年来,推荐为零,因此我最终被零除并收到 ZeroDivisionError。我已经找到了一种方法。但是为了学习,我怎么能用 if 语句来解决这个问题呢?你能解释一下下面的代码有什么问题吗?
这里只是我所有的变量,为了完整性而包括在内。
data_file = pd.read_csv('FCC_New_Coders_Survey_Data.csv', dtype={'AttendedBootcamp': float, 'CodeEventOther': object, 'JobRoleInterestOther': object})
AttendedBootcamp = data_file['AttendedBootcamp']
BootcampFullJob = data_file['BootcampFullJobAfter']
BootcampRecommend = data_file['BootcampRecommend']
Age = data_file['Age']
JobYes = data_file[data_file.BootcampFullJobAfter == 1]
JobNo = data_file[data_file.BootcampFullJobAfter == 0]
RecYes = data_file[data_file.BootcampRecommend == 1]
RecNo = data_file[data_file.BootcampRecommend == 0]
RecYesJobYes = data_file[data_file.BootcampRecommend == 1][data_file.BootcampFullJobAfter == 1 ]
RecNoJobYes = data_file[data_file.BootcampRecommend == 0][data_file.BootcampFullJobAfter == 1 ]
RecYesJobNo = data_file[data_file.BootcampRecommend == 1][data_file.BootcampFullJobAfter == 0 ]
RecNoJobNo = data_file[data_file.BootcampRecommend == 0][data_file.BootcampFullJobAfter == 0 ]
这是我失败的代码
numerator = [len(RecYesJobYes[RecYesJobYes.Age == i]) - len(RecNoJobYes[RecNoJobYes.Age == i]) for i in range(16, 60)]
denomerator = [len(RecYesJobYes[RecYesJobYes.Age == i]) + len(RecNoJobYes[RecNoJobYes.Age == i]) for i in range(16, 60)]
这是我对异常处理的尝试
try:
bananasplit = [int(m) / int(b) for b,m in zip(denomerator, numerator)]
except ZeroDivisionError:
b = 1 in denomerator
这是我的 if 语句
for b in [int(m) / int(b) for b,m in zip(denomerator, numerator)][:]:
if ZeroDivisionError:
b = 1 in denomerator
您可以像这样在列表理解中使用 if/else(从技术上讲,我们使用的是三元运算符):
bananasplit = [int(m) / int(b) if int(b) != 0 else int(m) for b,m in zip(denomerator, numerator)]
如果你想使用异常处理,你应该使用循环而不是列表理解:
bananasplit = []
for b, m in zip(denomerator, numerator):
try:
bananasplit.append(int(m)/int(b))
except ZeroDivisionError:
bananasplit.append(int(m))
我正在分析 FreeCodeCamp 2016 年的调查数据。 https://github.com/freeCodeCamp/2016-new-coder-survey
特别是 2016-new-coder-survey/clean-data/2016-FCC-New-Coders-Survey-Data.csv
我通过将净推荐量(差异)除以每个 x 值(年龄)的总数(#sum of recommendations)来标准化绘图。
几年来,推荐为零,因此我最终被零除并收到 ZeroDivisionError。我已经找到了一种方法。但是为了学习,我怎么能用 if 语句来解决这个问题呢?你能解释一下下面的代码有什么问题吗?
这里只是我所有的变量,为了完整性而包括在内。
data_file = pd.read_csv('FCC_New_Coders_Survey_Data.csv', dtype={'AttendedBootcamp': float, 'CodeEventOther': object, 'JobRoleInterestOther': object})
AttendedBootcamp = data_file['AttendedBootcamp']
BootcampFullJob = data_file['BootcampFullJobAfter']
BootcampRecommend = data_file['BootcampRecommend']
Age = data_file['Age']
JobYes = data_file[data_file.BootcampFullJobAfter == 1]
JobNo = data_file[data_file.BootcampFullJobAfter == 0]
RecYes = data_file[data_file.BootcampRecommend == 1]
RecNo = data_file[data_file.BootcampRecommend == 0]
RecYesJobYes = data_file[data_file.BootcampRecommend == 1][data_file.BootcampFullJobAfter == 1 ]
RecNoJobYes = data_file[data_file.BootcampRecommend == 0][data_file.BootcampFullJobAfter == 1 ]
RecYesJobNo = data_file[data_file.BootcampRecommend == 1][data_file.BootcampFullJobAfter == 0 ]
RecNoJobNo = data_file[data_file.BootcampRecommend == 0][data_file.BootcampFullJobAfter == 0 ]
这是我失败的代码
numerator = [len(RecYesJobYes[RecYesJobYes.Age == i]) - len(RecNoJobYes[RecNoJobYes.Age == i]) for i in range(16, 60)]
denomerator = [len(RecYesJobYes[RecYesJobYes.Age == i]) + len(RecNoJobYes[RecNoJobYes.Age == i]) for i in range(16, 60)]
这是我对异常处理的尝试
try:
bananasplit = [int(m) / int(b) for b,m in zip(denomerator, numerator)]
except ZeroDivisionError:
b = 1 in denomerator
这是我的 if 语句
for b in [int(m) / int(b) for b,m in zip(denomerator, numerator)][:]:
if ZeroDivisionError:
b = 1 in denomerator
您可以像这样在列表理解中使用 if/else(从技术上讲,我们使用的是三元运算符):
bananasplit = [int(m) / int(b) if int(b) != 0 else int(m) for b,m in zip(denomerator, numerator)]
如果你想使用异常处理,你应该使用循环而不是列表理解:
bananasplit = []
for b, m in zip(denomerator, numerator):
try:
bananasplit.append(int(m)/int(b))
except ZeroDivisionError:
bananasplit.append(int(m))