在Python中筛选包含混合日期格式的列表



假设我在python中有一个日期列表,格式为YYYY-mm-ddYYYY-mm

['2020-08-11', '2020-08-10', '2020-08-09', '2020-08-08', '2020-08-07',
'2020-08-06', '2020-08-05', '2020-08-04', '2020-08-03', '2020-08-02',
'2020-08-01', '2020-08', '2020-07', '2020-06', '2020-05', '2020-04',
'2020-03', '2020-02', '2020-01']

如果已经存在更具体的日期,我想从列表中删除任何YYYY-mm日期。

因此,在上面的示例中,我们需要删除'2020-08',因为'2020-08-01''2020-08-11'在列表中。

所以过滤后的列表是这样的:

['2020-08-11', '2020-08-10', '2020-08-09', '2020-08-08', '2020-08-07',
'2020-08-06', '2020-08-05', '2020-08-04', '2020-08-03', '2020-08-02',
'2020-08-01', '2020-07', '2020-06', '2020-05', '2020-04', '2020-03',
'2020-02', '2020-01']

有没有一种优雅快捷的方法可以做到这一点?提前谢谢。

这可能不是最有效的方法:

data = ['2020-08-11', '2020-08-10', '2020-08-09', '2020-08-08', '2020-08-07', '2020-08-06', 
'2020-08-05', '2020-08-04', '2020-08-03', '2020-08-02', '2020-08-01', '2020-08', '2020-07', 
'2020-06', '2020-05', '2020-04', '2020-03', '2020-02', '2020-01']
for i in data:
try:
# remove last 3 characters for example 
# for data "2020-08-11" [:-3] would be "2020-08"
data.remove(i[:-3])
except:
# Already has been removed
pass

data的值为:

['2020-08-11', '2020-08-10', '2020-08-09','2020-08-08', '2020-08-07','2020-08-06',
'2020-08-05', '2020-08-04', '2020-08-03', '2020-08-02', '2020-08-01', '2020-07', 
'2020-06', '2020-05', '2020-04', '2020-03', '2020-02', '2020-01']

您可以根据完整日期构建一组所有月份部分,然后从该集中出现的原始数据中筛选出条目:

months_in_dates = {d[:7] for d in data if len(d) > 7}
filtered = [d for d in data if d not in months_in_dates]

只是出于好奇,下面的内容不会给你同样的结果吗?由于您使用的是DateTime,因此理想情况下应该使用DateTime类型,而不是字符串操作。那么这种方法行得通吗?(将所有数据转换为相同格式的数据类型并取唯一(

a = ['2020-08-11', '2020-08-10', '2020-08-09', '2020-08-08', '2020-08-07', '2020-08-06','2020-08-05', 
'2020-08-04', '2020-08-03', '2020-08-02', '2020-08-01', '2020-08', '2020-07', '2020-06', 
'2020-05', '2020-04', '2020-03', '2020-02', '2020-01']
np.unique([pd.to_datetime(i, format='%Y-%m-%d') for i in a])
array([Timestamp('2020-01-01 00:00:00'), Timestamp('2020-02-01 00:00:00'),
Timestamp('2020-03-01 00:00:00'), Timestamp('2020-04-01 00:00:00'),
Timestamp('2020-05-01 00:00:00'), Timestamp('2020-06-01 00:00:00'),
Timestamp('2020-07-01 00:00:00'), Timestamp('2020-08-01 00:00:00'),
Timestamp('2020-08-02 00:00:00'), Timestamp('2020-08-03 00:00:00'),
Timestamp('2020-08-04 00:00:00'), Timestamp('2020-08-05 00:00:00'),
Timestamp('2020-08-06 00:00:00'), Timestamp('2020-08-07 00:00:00'),
Timestamp('2020-08-08 00:00:00'), Timestamp('2020-08-09 00:00:00'),
Timestamp('2020-08-10 00:00:00'), Timestamp('2020-08-11 00:00:00')],
dtype=object)

最新更新