Pandas将mongodb转换bson.tz为标准日期

qacovj5a  于 2022-11-03  发布在  Go
关注(0)|答案(2)|浏览(129)

我正在尝试用一个从mongodb文档中的数据创建的Pandas Dataframe 来计算与纪元秒数的偏移。
数据布局和操作的示例如下所示(此代码工作正常)

data = {'ds': ['2018-01-13 18:47:05.069722+00:00', '2018-01-14 18:47:05.119994+00:00', '2018-01-15 18:47:05.178768+00:00'], 
        'y': [38, 20, 26]}
df = pd.DataFrame(data, columns = ['ds', 'y']) 
df['ds'] = pd.to_datetime(df['ds'])
t = np.array(
                    (df['ds'] - pd.datetime(1970, 1, 1))
                    .dt.total_seconds()
                    .astype(np.float)
                ) / (3600 * 24.)

请注意,但是上面代码中ds列的dtype是

datetime64[ns]

而实际Pandas数据中date列的dtype为

datetime64[ns, <bson.tz_util.FixedOffset objec...

我能够解决这个问题的唯一方法是将其转换为string,然后再转换回date:

dates = df['ds'].apply(lambda x: x.strftime('%Y-%m-%d %H:%M:%S'))
df['ds'] = pd.to_datetime(dates)

有没有更好的方法来转换

datetime64[ns, <bson.tz_util.FixedOffset object

转换为datetime64[ns]列类型的Pandas?

yfwxisqw

yfwxisqw1#

这对我很有效。

import pandas as pd

# have to convert the series to date index

dsIndex = pd.Index(df['ds'])

# strip off the TZ info (assume it was <bson.tz_util.FixedOffset objec...)

dsIndex = dsIndex.tz_localize(tz=None)

# Reassign it to UTC

dsUTC = dsIndex.tz_localize(tz='UTC')
mnemlml8

mnemlml82#

import pytz

df[column] = df[column].apply(lambda x: x.astimezone(pytz.utc))

起作用

相关问题