如何将祖鲁时区字符串转换为特定的日期时间对象?
How can I convert Zulu time zone string into specific datetime object?
我有一个带有祖鲁时区的字符串格式的日期。我试图用正则表达式摆脱“Z”字符,但我想有更有效的方法。
输入:
|index | date | municipality
|------| --------------------|--------------
| 0 | 07.02.2021 1017Z | Algier
| 1 | 11.01.2019 1716Z | Abuja
| 2 | 23.02.2018 1002Z | Brüssel
| 3 | 19.07.2021 1459Z | Brüssel
| 4 | 26.11.2019 1049Z | Berlin
期望的结果:
|index | date | municipality
|------| --------------------|--------------
| 0 | 2021-02-17 | Algier
| 1 | 2019-01-11 | Abuja
| 2 | 2018-02-23 | Bruxelles
| 3 | 2021-07-19 | Bruxelles
| 4 | 2019-11-26 | Berlin
与其去掉 Z 字符,不如正确解析它。例如:
import pandas as pd
df = pd.DataFrame({'date': ['07.02.2021 1017Z', '11.01.2019 1716Z']})
df['date'] = pd.to_datetime(df['date'], format='%d.%m.%Y %H%M%z')
# df['date']
# Out[19]:
# 0 2021-02-07 10:17:00+00:00
# 1 2019-01-11 17:16:00+00:00
# Name: date, dtype: datetime64[ns, UTC]
请注意,设置 format
关键字是可选的,但明确指定它有助于提高总体可靠性。
如果你不想要,你也可以降低时间:
df['date'] = df['date'].dt.floor('D')
# df['date']
# Out[21]:
# 0 2021-02-07 00:00:00+00:00
# 1 2019-01-11 00:00:00+00:00
# Name: date, dtype: datetime64[ns, UTC]
...或格式化为字符串:
df['date'].dt.strftime('%Y-%m-%d')
# 0 2021-02-07
# 1 2019-01-11
# Name: date, dtype: object
我认为这会很好用。此外,您可以在转换期间对日期进行一些计算。
from datetime import datetime as dt
# specify input and output formats
input_format = '%d.%m.%Y %H%MZ'
output_format = '%Y-%m-%d'
# input date
input_date = '07.02.2021 1017Z'
# convert input date to datetime object
date = dt.strptime(input_date, input_format)
# convert datetime object to string with output format
output_date = dt.strftime(date, output_format)
print(output_date)
# output: 2021-02-07
Alexei 的方法也是一个很好的解决方案,我们可以将其代码转换为一个函数并使用它示例:
from datetime import datetime as dt
df=pd.DataFrame()
dates=['07.02.2021 1017Z','11.01.2019 1716Z','23.02.2018 1002Z']
municipality=['Algier','Abuja','Brüssel' ]
df['date']=dates
df['municipality']=municipality
# specify input and output formats
input_format = '%d.%m.%Y %H%M%z'
output_format = '%Y-%m-%d'
# input date
input_date = '07.02.2021 1017Z'
def convert(input_date):
# convert input date to datetime object
date = dt.strptime(input_date, input_format)
# convert datetime object to string with output format
output_date = dt.strftime(date, output_format)
return(output_date)
df.date.apply(convert)
df
我有一个带有祖鲁时区的字符串格式的日期。我试图用正则表达式摆脱“Z”字符,但我想有更有效的方法。
输入:
|index | date | municipality
|------| --------------------|--------------
| 0 | 07.02.2021 1017Z | Algier
| 1 | 11.01.2019 1716Z | Abuja
| 2 | 23.02.2018 1002Z | Brüssel
| 3 | 19.07.2021 1459Z | Brüssel
| 4 | 26.11.2019 1049Z | Berlin
期望的结果:
|index | date | municipality
|------| --------------------|--------------
| 0 | 2021-02-17 | Algier
| 1 | 2019-01-11 | Abuja
| 2 | 2018-02-23 | Bruxelles
| 3 | 2021-07-19 | Bruxelles
| 4 | 2019-11-26 | Berlin
与其去掉 Z 字符,不如正确解析它。例如:
import pandas as pd
df = pd.DataFrame({'date': ['07.02.2021 1017Z', '11.01.2019 1716Z']})
df['date'] = pd.to_datetime(df['date'], format='%d.%m.%Y %H%M%z')
# df['date']
# Out[19]:
# 0 2021-02-07 10:17:00+00:00
# 1 2019-01-11 17:16:00+00:00
# Name: date, dtype: datetime64[ns, UTC]
请注意,设置 format
关键字是可选的,但明确指定它有助于提高总体可靠性。
如果你不想要,你也可以降低时间:
df['date'] = df['date'].dt.floor('D')
# df['date']
# Out[21]:
# 0 2021-02-07 00:00:00+00:00
# 1 2019-01-11 00:00:00+00:00
# Name: date, dtype: datetime64[ns, UTC]
...或格式化为字符串:
df['date'].dt.strftime('%Y-%m-%d')
# 0 2021-02-07
# 1 2019-01-11
# Name: date, dtype: object
我认为这会很好用。此外,您可以在转换期间对日期进行一些计算。
from datetime import datetime as dt
# specify input and output formats
input_format = '%d.%m.%Y %H%MZ'
output_format = '%Y-%m-%d'
# input date
input_date = '07.02.2021 1017Z'
# convert input date to datetime object
date = dt.strptime(input_date, input_format)
# convert datetime object to string with output format
output_date = dt.strftime(date, output_format)
print(output_date)
# output: 2021-02-07
Alexei 的方法也是一个很好的解决方案,我们可以将其代码转换为一个函数并使用它示例:
from datetime import datetime as dt
df=pd.DataFrame()
dates=['07.02.2021 1017Z','11.01.2019 1716Z','23.02.2018 1002Z']
municipality=['Algier','Abuja','Brüssel' ]
df['date']=dates
df['municipality']=municipality
# specify input and output formats
input_format = '%d.%m.%Y %H%M%z'
output_format = '%Y-%m-%d'
# input date
input_date = '07.02.2021 1017Z'
def convert(input_date):
# convert input date to datetime object
date = dt.strptime(input_date, input_format)
# convert datetime object to string with output format
output_date = dt.strftime(date, output_format)
return(output_date)
df.date.apply(convert)
df