【问题标题】:Get the Week Number between two Dates Pandas获取两个日期 Pandas 之间的周数
【发布时间】:2017-11-16 17:59:03
【问题描述】:

我有一个基本代码 sn-p,需要在 pandas 中重新创建:

import datetime as dt
date1 = dt.date(2016,10,10)
date2 = dt.date.today()
print('Week#', round((date2 - date1).days / 7 +.5))
# output: Week# 36

我有一个datetime64[ns] 数据类型列,但我无法破解它。使用这个基本示例我很难过:

import pandas as pd
import numpy as np
import datetime as dt
dfp = pd.DataFrame({'A' : [dt.date(2016,10,6)]})
dfp['A'] = pd.to_datetime(dfp['A'])

def week(col):
    print((col.dt.date -  dt.date(2015, 10, 6)))

week(dfp['A']) #output: 366 days 

当我尝试重新创建周数计算时,我遇到了多个错误:print((col.dt.date - dt.date(2015, 10, 6)).days) 返回AttributeError: 'Series' object has no attribute 'days'

我想尝试自己解决这个问题,以便从痛苦中吸取教训。

如何以“天数”或 int 的形式返回 pandas 列值,例如使用第一个代码 sn-p 中的第一个计算? (即,而不是366 days,只是366

如果您喜欢冒险,我怎样才能以更有效的方式获得Week# xxx 输出?

【问题讨论】:

    标签: python date pandas datetime dataframe


    【解决方案1】:

    我想你忘了.dt

    dfp = pd.DataFrame({'A' : [date2]})
    dfp['A'] = pd.to_datetime(dfp['A'])
    print (dfp)
    
    print (((dfp['A'].dt.date -  dt.date(2016, 10, 10)).dt.days / 7 + .5).round().astype(int))
    0    36
    Name: A, dtype: int32
    

    【讨论】:

    • 这适用于我的小例子。但我在我的实际项目中获得了IndexError: unsupported iterator index 的更大示例:print(((df1['Referral Date'].dt.date - dt.date(2016,10,10)).dt.days / 7 + .5).round().astype(int))。推荐日期的 dtype 是确认的datetime64[ns]。有什么想法吗?
    • 嗯,对我来说很好用 dfp = pd.DataFrame({'A' : [dt.date.today(), dt.date(2016,12,10), dt.date(2016,11,10)]})。不给你?
    • print(((df1['Referral Date'].dt.date - dt.date(2016,10,10)).dt.days 也可以处理您的真实数据?
    • 您的第一个评论运行良好,当我尝试运行第二个代码片段时,我再次收到IndexError: unsupported iterator index
    • 嗯,如果重置索引,还是同样的问题? df = df.reset_index(drop=True)
    猜你喜欢
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多