【问题标题】:Pandas Equivalent to SQL YEAR(GETDATE())Pandas 等价于 SQL YEAR(GETDATE())
【发布时间】:2017-11-29 07:48:33
【问题描述】:

我是 Pandas 新手,但在 SQL 方面表现不错。我经常在 SQL 中使用的一个函数是:

YEAR(date_format_data) = (YEAR(GETDATE())-1) 

这将为我提供去年的所有数据。有人可以帮我理解如何在 Pandas 中做同样的事情吗?

以下是一些示例数据:

Date     Number
01/01/15 1
01/02/15 2
01/01/15 3
01/01/16 2
01/01/16 1

这是我对代码的最佳猜测:

df = df[YEAR('Date') == (YEAR(GETDATE()) -1)].agg(['sum'])

这段代码会返回一个值'3'。

提前感谢您的帮助,我很难弄清楚我确信什么很简单。

【问题讨论】:

  • 您可能需要先使用df.Date = pd.to_datetime(df.Date)Date 列转换为日期时间对象。
  • 如果您使用pd.to_datetime,如果日期不是标准格式,性能可能会成为问题。 This 那时可能有用。

标签: python-3.x sorting date pandas filter


【解决方案1】:

我认为你可以这样做:

prev_year = pd.datetime.today().year - 1
df.loc[df['Date'].dt.year == prev_year]

PS .dt.year 访问器仅在 Date 列是 datetime dtype 时才有效。如果不是这种情况,您可能需要先将该列转换为 datetime dtype:

df['Date'] = pd.to_datetime(df['Date'], errors='coerce')

【讨论】:

  • 您的示例代码中的意思是“1 年”而不是“1 天”吗?
  • @SDS,据我所知GETDATE()-1 - 是(今天减去一天)昨天。你的意思是不同的吗?
  • 对不起 MaxU,你是对的 - 我想回到一年,而不是一天。我的错误,将更新上面的代码。
  • @SDS,我已经相应地更新了我的答案......但现在我不确定它是否是你需要的。您确定要仅比较“年份”部分吗?
  • 是的,我正在尝试比较每年的销售交易。我希望报告动态更新,而不是更新硬编码年份。此代码示例将工作数月和数周,所以我应该很好。谢谢!
【解决方案2】:

对于熊猫,首先将您的日期列转换为pd.to_datetime的时间戳

df['Date2'] = pd.to_datetime(df['Date'])

pd.to_datetime有一个格式参数来指定你输入的日期格式)那么你就有了

df['Date2'].year

【讨论】:

    猜你喜欢
    • 2017-01-15
    • 1970-01-01
    • 2018-02-18
    • 2014-09-25
    • 2010-12-07
    • 2022-08-11
    • 2021-09-06
    • 1970-01-01
    相关资源
    最近更新 更多