将具有范围的字符串表示拆分为日期列表
split a string representation with ranges into a list of dates
我有这个 pandas 数据框列,其中包含时间范围 (02.07.2021 - 07.07.2021) 和单日 (04.08.2021) 作为列表。
Dates
'02.07.2021 - 07.07.2021 , 04.08.2021, 19.06.2021 - 21.06.2021'
'13.02.2021 - 15.02.2021 , 03.03.2021 '
NaN
NaN
我想要这个:
Dates
02.07.2021, 03.07.2021, 04.07.2021, 05.07.2021, 06.07.2021, 07.07.2021, 04.08.2021, 19.06.2021, 20.06.2021, 21.06.2021
13.02.2021, 14.02.2021, 15.02.2021, 03.03.2021
NaN
NaN
所以基本上我想要列表中每个时间范围内的每一天。
是否有 pandas 解决方案? (我试图用 range 和 iloc 来解决它,但这是完成这个“简单”任务的方法)。
奖励:日期应具有日期时间类型 (pd.to_datetime()
)
您可以使用列表理解:
pd.Series([[str(d.strftime('%d.%m.%Y'))
for x in re.split('\s*,\s*', s)
for d in (pd.date_range(*map(lambda d: pd.to_datetime(d, format='%d.%m.%Y'),
x.split(' - ')),
freq='D')
if ' - ' in x else [pd.to_datetime(x.strip(), format='%d.%m.%Y')])]
for s in df['Dates']])
输出:
0 [02.07.2021, 03.07.2021, 04.07.2021, 05.07.202...
1 [13.02.2021, 14.02.2021, 15.02.2021, 03.03.2021]
dtype: object
使用的输入:
d = ['02.07.2021 - 07.07.2021 , 04.08.2021, 19.06.2021 - 21.06.2021',
'13.02.2021 - 15.02.2021 , 03.03.2021 ']
df = pd.DataFrame({'Dates': d})
我有这个 pandas 数据框列,其中包含时间范围 (02.07.2021 - 07.07.2021) 和单日 (04.08.2021) 作为列表。
Dates |
---|
'02.07.2021 - 07.07.2021 , 04.08.2021, 19.06.2021 - 21.06.2021' |
'13.02.2021 - 15.02.2021 , 03.03.2021 ' |
NaN |
NaN |
我想要这个:
Dates |
---|
02.07.2021, 03.07.2021, 04.07.2021, 05.07.2021, 06.07.2021, 07.07.2021, 04.08.2021, 19.06.2021, 20.06.2021, 21.06.2021 |
13.02.2021, 14.02.2021, 15.02.2021, 03.03.2021 |
NaN |
NaN |
所以基本上我想要列表中每个时间范围内的每一天。
是否有 pandas 解决方案? (我试图用 range 和 iloc 来解决它,但这是完成这个“简单”任务的方法)。
奖励:日期应具有日期时间类型 (pd.to_datetime()
)
您可以使用列表理解:
pd.Series([[str(d.strftime('%d.%m.%Y'))
for x in re.split('\s*,\s*', s)
for d in (pd.date_range(*map(lambda d: pd.to_datetime(d, format='%d.%m.%Y'),
x.split(' - ')),
freq='D')
if ' - ' in x else [pd.to_datetime(x.strip(), format='%d.%m.%Y')])]
for s in df['Dates']])
输出:
0 [02.07.2021, 03.07.2021, 04.07.2021, 05.07.202...
1 [13.02.2021, 14.02.2021, 15.02.2021, 03.03.2021]
dtype: object
使用的输入:
d = ['02.07.2021 - 07.07.2021 , 04.08.2021, 19.06.2021 - 21.06.2021',
'13.02.2021 - 15.02.2021 , 03.03.2021 ']
df = pd.DataFrame({'Dates': d})