Google Colab重复运行Python代码报AttributeError问题求助
问题分析与解决方法
问题根源
第一次运行转换代码时,hr['Hire Date']列的元素是字符串类型,split()方法可以正常执行;执行完成后,该列被转换为pandas的Timestamp对象。第二次重复运行时,列中已经是Timestamp类型的数据,而Timestamp没有split()方法,因此抛出AttributeError。重启笔记本后,数据源被重新加载,列回到初始的字符串类型,所以代码又能正常运行。
解决方法
方法1:在转换函数中加入类型判断
在自定义的convert_date函数里先检查元素类型,如果已经是日期类型就直接返回,避免重复转换:
import datetime import pandas as pd def convert_date(x): # 检查是否已经是日期类型 if isinstance(x, (pd.Timestamp, datetime.datetime)): return x y = x.split(' ')[0] return datetime.datetime(int(y.split('/')[2]), int(y.split('/')[1]), int(y.split('/')[0])) hr['Hire Date'] = hr['Hire Date'].map(convert_date)
方法2:使用pandas内置的日期转换工具
pandas的pd.to_datetime()函数更健壮,能自动处理已转换为日期类型的元素,还支持多种日期格式:
# 无需自定义convert_date函数,直接替换第3块代码 import pandas as pd # 指定日期格式为日/月/年,匹配你的数据格式 hr['Hire Date'] = pd.to_datetime(hr['Hire Date'], format='%d/%m/%Y')
如果你的日期格式不固定,可以省略format参数,让pandas自动推断格式。
方法3:避免重复执行转换代码
在Colab中可以给转换代码块添加执行标记,或者在执行前重新加载原始数据源,确保每次执行转换时列都是初始的字符串类型。
内容的提问来源于stack exchange,提问作者João Gabriel P. Agapito
相关产品推荐
相关产品推荐

