Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何验证字符串是否对应于有效的日期时间频率?(如&x27;1D&x27;)_Python_Pandas_Datetime - Fatal编程技术网

Python 如何验证字符串是否对应于有效的日期时间频率?(如&x27;1D&x27;)

Python 如何验证字符串是否对应于有效的日期时间频率?(如&x27;1D&x27;),python,pandas,datetime,Python,Pandas,Datetime,简而言之,python中有几个datetime功能允许您使用频率对日期范围进行重新采样(例如,每日、每周等,以ts.resample('1D').apply(np.sum)的形式使用),但我还没有找到任何机制来验证字符串是否为有效频率 我查看了文档,在那里我找到了,但仍然无法验证它 我还在(pd.offsets.prefix_映射)中找到了一个带有偏移量的前缀映射,但我认为要使用这个前缀映射,我必须从字符串中删除数值(例如,'M'而不是'3M') 我也不确定这两者是否对应于相同的数据结构 TLD

简而言之,python中有几个datetime功能允许您使用频率对日期范围进行重新采样(例如,每日、每周等,以ts.resample('1D').apply(np.sum)的形式使用),但我还没有找到任何机制来验证字符串是否为有效频率

我查看了文档,在那里我找到了,但仍然无法验证它

我还在(pd.offsets.prefix_映射)中找到了一个带有偏移量的前缀映射,但我认为要使用这个前缀映射,我必须从字符串中删除数值(例如,'M'而不是'3M'

我也不确定这两者是否对应于相同的数据结构

TLDR

是否有任何直接的方法来验证字符串是否对应于偏移量/频率?如何确保freq有效

 freq = '2D'
 # TODO Validate freq
 pd.date_range(start='1/1/2018', end='1/09/2018', freq=freq)


使用正则表达式,如:

[0-9][DM]
1D
2D
3M
将符合前面的正则表达式


有关Python中的正则表达式实现的更多信息,请参阅。

使用pandas函数进行偏移:

最后的to_offset调用将生成错误:

ValueError:无效频率:3X


因此,您可以使用try/except来验证任何给定的偏移量别名。

带有输入片段和预期输出的问题得到比文本解释更好的回答。谢谢@mohanys。为了便于阅读,我将其添加为TLDR。不幸的是,有很多不同的有效版本。我认为正则表达式不能解决我的问题。不过,谢谢你。我看不到你似乎看到的反例。你能详细说明一下吗?例如,1h23m。这不是反例<代码>([0-9]M)?([0-9][Hh])?([0-9]|1[0-9]|2[0-3])[Mm])?适合于此。(如果空字符串是有效输入)。谢谢你,马克!好久不见了,啊哈
from pandas.tseries.frequencies import to_offset
to_offset("5min")
to_offset("1D1H")
to_offset("2W")
to_offset("3X")