То, как вы вводите результат в DataFrame, не работает.Команда
df['returncode']= ...
помещает значение в каждую строку кадра данных.Таким образом, то, что вы видите в конце, в одиннадцать раз превышает найденное значение last .
Чтобы улучшить это, вам нужно поместить результат в определенную строку.Вы можете перебирать строки, как это:
for index, row in df.iterrows():
url = row['URL']
print(url)
try:
#print(urllib2.urlopen(url).getcode())
row['returncode']=urllib2.urlopen(url).getcode()
except:
row['returncode']='Obsolete'
#print('obsolete')