【问题标题】:Evaluate DataFrame datetime.datetime objects without iteration无需迭代即可评估 DataFrame datetime.datetime 对象
【发布时间】:2020-08-26 13:17:27
【问题描述】:

正如我所看到的here,如果您希望您的代码具有可扩展性,那么迭代 DataFrame 并不有趣......

因此,我正在导入一个 .xlsx 电子表格,其中包含 Pandas 自动识别为 datetime.datetime 格式的“日期”列。

下面是代码示例:

import pandas as pd
import datetime

df = pd.read_excel('Sheet.xlsx')

df['Date'][0].month == 1

Output:
True

如果我尝试df['Date'].month,它会给出AttributeError: 'Series' object has no attribute 'month'

df['Date'] 输入返回一个包含所有 datetime.datetime 对象的系列。

所以我的问题是如何在测试月份获得一个包含所有布尔值的系列,而不必逐个迭代所有行?

我也考虑过those methods 选择具有给定值的行,但老实说,我坚持这样做,因为我正在过滤对象。

也可能是错误的,但我相信如果我只需要迭代月份数而不是每一行会更有效......

【问题讨论】:

    标签: python-3.x pandas dataframe datetime filter


    【解决方案1】:

    使用Series.dt.month,如果需要从列中提取属性.dt

    df['Date'] = pd.to_datetime(df['Date'], errors='coerce')
    
    mask = df['Date'].dt.month == 1
    

    Series.eq 进行比较:

    mask = df['Date'].dt.month.eq(1)
    

    【讨论】:

    • 嘿,成功了!!嗯......不是马上,因为它得到了AttributeError: Can only use .dt accessor with datetimelike values 错误。但在使用 .dt 访问器之前,我只需要df['Data'] = pd.to_datetime(df['Data'], errors='coerce'),一切正常。谢谢!
    • @Azgrom - 有趣的是,大多数时间如果从 excel 读取日期时间,则无需转换;)
    猜你喜欢
    • 2015-10-23
    • 2011-11-08
    • 1970-01-01
    • 2015-02-05
    • 2021-10-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 2019-06-03
    相关资源
    最近更新 更多