下面显示了一个极简示例,我本质上有两个函数,一个函数使用“日期”列作为输入创建年份列,另一个函数将数据从 csv 文件加载到 df 中。
def create_year_column(df: pd.DataFrame) -> pd.DataFrame:
df['year'] = df['date'].dt.year.astype(str)
return df
def load_data(path: str) -> pd.DataFrame:
# load the data from csv file
data = pd.read_csv(
path,
dtype={
'amount': float,
'category': str,
'date': str,
},
parse_dates=['date']
)
create_year_column(data)
return data
我遇到的问题是,当我在 python 3.10 中运行它时,出现以下错误:
AttributeError:只能将 .dt 访问器与类似日期时间的值一起使用。您指的是:“在”吗?
我使用的代码行似乎有问题:
df['year'] = df['date'].dt.year.astype(str)
从技术上讲,我假设 df['date'] 列已被解析为日期格式,这是因为在我将其格式化后,它在 load_data() 函数中被调用(使用: parse_dates=['date'] ) .
当我在 pyton 3.9 中运行这段代码时,我没有任何问题,只有 3.10 让我心痛。有谁知道为什么吗?
您可能想尝试手动将日期字符串转换为 Pandas DateTime。
data["date"] = pd.to_datetime(data["date"])
create_year_column(data)
根据日期的格式,它可能不会自动将其解析为日期。我最终陷入了这样的境地:我必须非常明确才能让我的约会对象成功。例如:
data["date"] = pd.to_datetime(data["date"], format='ISO8601', dayfirst=False)
在此处查看to_datetime的文档。