在python中查找两个日期之间的天数,但仅查找数字
我试图找出一系列日期和一个日期的区别。例如,该系列是 从5月1日到6月1日在python中查找两个日期之间的天数,但仅查找数字,python,pandas,datetime,Python,Pandas,Datetime,我试图找出一系列日期和一个日期的区别。例如,该系列是 从5月1日到6月1日 date = pd.DataFrame() In [0]: date['test'] = pd.date_range("2021-05-01", "2021-06-01", freq = "D") Out[0]: date test 0 2021-05-01 00:00:00 1 2021-05-02 00:00:00 2 2021-05
date = pd.DataFrame()
In [0]: date['test'] = pd.date_range("2021-05-01", "2021-06-01", freq = "D")
Out[0]: date
test
0 2021-05-01 00:00:00
1 2021-05-02 00:00:00
2 2021-05-03 00:00:00
3 2021-05-04 00:00:00
4 2021-05-05 00:00:00
5 2021-05-06 00:00:00
6 2021-05-07 00:00:00
7 2021-05-08 00:00:00
8 2021-05-09 00:00:00
9 2021-05-10 00:00:00
In[1]
date['test'] = date['test'].dt.date
Out[1]:
test
0 2021-05-01
1 2021-05-02
2 2021-05-03
3 2021-05-04
4 2021-05-05
5 2021-05-06
6 2021-05-07
7 2021-05-08
8 2021-05-09
9 2021-05-10
In[2]:date['base'] = dt.strptime("2021-05-01",'%Y-%m-%d')
Out[2]:
0 2021-05-01 00:00:00
1 2021-05-01 00:00:00
2 2021-05-01 00:00:00
3 2021-05-01 00:00:00
4 2021-05-01 00:00:00
5 2021-05-01 00:00:00
6 2021-05-01 00:00:00
7 2021-05-01 00:00:00
8 2021-05-01 00:00:00
9 2021-05-01 00:00:00
In[3]:date['base'] = date['base'].dt.date
Out[3]:
base
0 2021-05-01
1 2021-05-01
2 2021-05-01
3 2021-05-01
4 2021-05-01
5 2021-05-01
6 2021-05-01
7 2021-05-01
8 2021-05-01
9 2021-05-01
In[4]:date['test']-date['base']
Out[4]:
diff
0 0 days 00:00:00.000000000
1 1 days 00:00:00.000000000
2 2 days 00:00:00.000000000
3 3 days 00:00:00.000000000
4 4 days 00:00:00.000000000
5 5 days 00:00:00.000000000
6 6 days 00:00:00.000000000
7 7 days 00:00:00.000000000
8 8 days 00:00:00.000000000
9 9 days 00:00:00.000000000
10 10 days 00:00:00.000000000
我唯一能得到的就是这个。除了数字1-10,我什么都不想要,因为我需要它们来进行进一步的数值计算,但我无法摆脱它们。另外,我如何构建一个只输出日期而不输出日期后的hms的时间序列?我不想手动为所有这些设置.dt.date,它有时会把事情搞得一团糟您不需要为此创建列
基
,只需执行以下操作:
>>> (date['test'] - pd.to_datetime("2021-05-01", format='%Y-%m-%d')).dt.days
0 0
1 1
2 2
3 3
4 4
...
27 27
28 28
29 29
30 30
31 31
Name: test, dtype: int64
您可以首先将时间戳转换为(它们实际上在内部存储为某个数字,可能是历元秒数的一个因数) 使用
将熊猫作为pd导入
#以日期列开始df
df=pd.DataFrame({“日期”:pd.date_范围(“2021-05-01”,“2021-06-01”,freq=“D”)})
#为datetimes创建一列
df[“ts”]=(df[“date”]-pd.Timestamp(“1970-01-01”)//pd.Timedelta(“1s”)
>>df
日期ts
0 2021-05-01 1619827200
1 2021-05-02 1619913600
2 2021-05-03 1620000000
3 2021-05-04 1620086400
...
31 2021-06-01 1622505600
这将允许您在转换回之前进行整数运算
>>df[“days”]=(df[“ts”]-分钟(df[“ts”])/(60*60*24)#1天(秒)
>>>df
日期ts天
0 2021-05-01 1619827200 0
1 2021-05-02 1619913600 1
2 2021-05-03 1620000000 2
3 2021-05-04 1620086400 3
...
31 2021-06-01 1622505600 31
或者,对于基于日期的原始序列,您可以使用索引作为日期偏移量(因为数据帧就是这样生成的)
>>将熊猫作为pd导入
>>>df=pd.DataFrame({“日期”:pd.date_范围(“2021-05-01”,“2021-06-01”,freq=“D”)})
>>>df[“天”]=df.index
>>>df
日期天数
0 2021-05-01 0
1 2021-05-02 1
2 2021-05-03 2
3 2021-05-04 3
...
31 2021-06-01 31
这不是与范围(两个日期之间的1天+1)相同吗?
?如果需要,将范围转换为列表您指的是下一项为当前+1的列表?我需要它是灵活的,就像会有不连续的输入一样,这个问题本身并不清楚。感谢您澄清这一点,如果说“Timestamp”对象没有属性“dt”,则会出现错误。我从datetime开始导入datetime作为dt编辑:它突然起作用了,现在没问题了,谢谢!