将 unix 对象列转换为日期时间 - python
Convert column of unix objects to datetime - python
我希望将 UNIX 时间戳对象转换为 pandas 日期时间。我从一个单独的来源导入时间戳,第一个时间点显示 21-01-22 00:01
的日期时间,第二个时间点显示 21-01-22 00:15
的日期时间。然而我的转换比这两个晚了 10 个小时。这与每个字符串末尾的+1000有关吗?
df = pd.DataFrame({
'Time' : ['/Date(1642687260000+1000)/','/Date(1642688100000+1000)/'],
})
df['Time'] = df['Time'].str.split('+').str[0]
df['Time'] = df['Time'].str.split('(').str[1]
df['Time'] = pd.to_datetime(df['Time'], unit = 'ms')
输出:
Time
0 2022-01-20 14:01:00
1 2022-01-20 14:15:00
其他来源:
Time
0 2022-01-21 00:01:00
1 2022-01-21 00:15:00
您可以使用正则表达式提取 Unix 时间和 UTC 偏移量,然后将 Unix 时间解析为日期时间并将 UTC 偏移量添加为时间增量,例如
import pandas as pd
df = pd.DataFrame({
'Time' : ['/Date(1642687260000+1000)/','/Date(1642688100000+1000)/', None],
})
df[['unix', 'offset']] = df['Time'].str.extract(r'(\d+)([+-]\d+)')
# datetime from unix first, leaves NaT for invalid values
df['datetime'] = pd.to_datetime(df['unix'], unit='ms')
# where datetime is not NaT, add the offset:
df.loc[~df['datetime'].isnull(), 'datetime'] += (
pd.to_datetime(df['offset'][~df['datetime'].isnull()], format='%z').apply(lambda t: t.utcoffset())
)
# or without the apply, but by using an underscored method:
# df['datetime'] = (pd.to_datetime(df['unix'], unit='ms') +
# pd.to_datetime(df['offset'], format='%z').dt.tz._offset)
df['datetime']
# 0 2022-01-21 00:01:00
# 1 2022-01-21 00:15:00
# 2 NaT
# Name: datetime, dtype: datetime64[ns]
不幸的是,如果您想避免 apply
,则必须使用带下划线的(“私有”)方法。这也只有在你有一个恒定的偏移量时才有效,即如果它在整个系列中都是相同的偏移量。
我希望将 UNIX 时间戳对象转换为 pandas 日期时间。我从一个单独的来源导入时间戳,第一个时间点显示 21-01-22 00:01
的日期时间,第二个时间点显示 21-01-22 00:15
的日期时间。然而我的转换比这两个晚了 10 个小时。这与每个字符串末尾的+1000有关吗?
df = pd.DataFrame({
'Time' : ['/Date(1642687260000+1000)/','/Date(1642688100000+1000)/'],
})
df['Time'] = df['Time'].str.split('+').str[0]
df['Time'] = df['Time'].str.split('(').str[1]
df['Time'] = pd.to_datetime(df['Time'], unit = 'ms')
输出:
Time
0 2022-01-20 14:01:00
1 2022-01-20 14:15:00
其他来源:
Time
0 2022-01-21 00:01:00
1 2022-01-21 00:15:00
您可以使用正则表达式提取 Unix 时间和 UTC 偏移量,然后将 Unix 时间解析为日期时间并将 UTC 偏移量添加为时间增量,例如
import pandas as pd
df = pd.DataFrame({
'Time' : ['/Date(1642687260000+1000)/','/Date(1642688100000+1000)/', None],
})
df[['unix', 'offset']] = df['Time'].str.extract(r'(\d+)([+-]\d+)')
# datetime from unix first, leaves NaT for invalid values
df['datetime'] = pd.to_datetime(df['unix'], unit='ms')
# where datetime is not NaT, add the offset:
df.loc[~df['datetime'].isnull(), 'datetime'] += (
pd.to_datetime(df['offset'][~df['datetime'].isnull()], format='%z').apply(lambda t: t.utcoffset())
)
# or without the apply, but by using an underscored method:
# df['datetime'] = (pd.to_datetime(df['unix'], unit='ms') +
# pd.to_datetime(df['offset'], format='%z').dt.tz._offset)
df['datetime']
# 0 2022-01-21 00:01:00
# 1 2022-01-21 00:15:00
# 2 NaT
# Name: datetime, dtype: datetime64[ns]
不幸的是,如果您想避免 apply
,则必须使用带下划线的(“私有”)方法。这也只有在你有一个恒定的偏移量时才有效,即如果它在整个系列中都是相同的偏移量。