python 3.10 不允许我使用 df.dt python 3.9 可以

问题描述 投票:0回答:1

下面显示了一个极简示例,我本质上有两个函数,一个函数使用“日期”列作为输入创建年份列,另一个函数将数据从 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 让我心痛。有谁知道为什么吗?

python pandas python-3.10
1个回答
0
投票

您可能想尝试手动将日期字符串转换为 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的文档。

© www.soinside.com 2019 - 2024. All rights reserved.