计算今天的日期和熊猫的日期系列之间的日期差

时间:2018-12-31 10:38:20

标签: python pandas

要计算熊猫日期序列之间的天数差-

^\d+\s*\d*\.?\d*

和今天的日期。

我尝试过,但无法提出合理的解决方案。 请帮助我的代码。实际上,我是python新手,应用任何函数时都会发生很多语法错误。

4 个答案:

答案 0 :(得分:1)

您可以尝试以下操作:

>>> from datetime import datetime
>>> df
        col1
0 2013-02-16
1 2013-01-29
2 2013-02-21
3 2013-02-22
4 2013-03-01
5 2013-03-14
6 2013-03-18
7 2013-03-21

确保将列名称转换为_datetime:

>>> df['col1'] = pd.to_datetime(df['col1'], infer_datetime_format=True)

设置当前日期时间以进一步获得差异:

>>> curr_time = pd.to_datetime("now")

现在获得如下差异:

>>> df['col1'] - curr_time
0   -2145 days +07:48:48.736939
1   -2163 days +07:48:48.736939
2   -2140 days +07:48:48.736939
3   -2139 days +07:48:48.736939
4   -2132 days +07:48:48.736939
5   -2119 days +07:48:48.736939
6   -2115 days +07:48:48.736939
7   -2112 days +07:48:48.736939
Name: col1, dtype: timedelta64[ns]

答案 1 :(得分:1)

使用numpy,您可以像difference-two-dates-days-weeks-months-years-pandas-python-2一样解决它 。底线

df['diff_days'] = df['First dates column'] - df['Second Date column']

# for days use 'D' for weeks use 'W', for month use 'M' and for years use 'Y'
df['diff_days']=df['diff_days']/np.timedelta64(1,'D')      
print(df) 

如果您希望天数为整数而不是浮点数,则使用

df['diff_days']=df['diff_days']//np.timedelta64(1,'D')      

答案 2 :(得分:0)

您可以做类似的事情

# generate time data
data = pd.to_datetime(pd.Series(["2018-09-1", "2019-01-25", "2018-10-10"]))
pd.to_datetime("now") > data

返回:

0    False
1     True
2    False

然后您可以使用它来选择数据

data[pd.to_datetime("now") > data]

希望有帮助。

编辑:我看错了,但是您可以轻松地更改此示例以计算差异:

data -  pd.to_datetime("now")

返回:

0   -122 days +13:10:37.489823
1      24 days 13:10:37.489823
2    -83 days +13:10:37.489823
dtype: timedelta64[ns]

答案 3 :(得分:0)

Converting To Timestamps下的pandas文档中,您将找到:

转换为时间戳要转换系列或类似日期的对象的列表对象(例如字符串,历元或混合物),可以使用to_datetime函数

我以前没有使用过熊猫,但这表明您的熊猫日期系列(一个类似列表的对象)是可迭代的,并且该系列的每个元素都是具有to_datetime函数的类的实例。

假设我的假设是正确的,下面的函数将采用这样的列表,并返回timedeltas(代表两个日期时间对象之间的差的datetime对象)列表。

from datetime import datetime

def convert(pandas_series):
    # get the current date
    now = datetime.now()

    # Use a list comprehension and the pandas to_datetime method to calculate timedeltas.
    return [now - pandas_element.to_datetime() for pandas_series]

# assuming 'some_pandas_series' is a list-like pandas series object
list_of_timedeltas = convert(some_pandas_series)