gpt4 book ai didi

python - Pandas 转换日期时间格式

转载 作者:行者123 更新时间:2023-12-01 01:46:49 26 4
gpt4 key购买 nike

我有一个 pandas 数据框,其中包含一列日期时间对象,格式如下:

df['TIME_M']=pd.to_datetime(df['TIME_M'],format='%Y%m%d %H:%M:%S.%f')

但是,同时,我还想要一列具有以下格式的日期时间(不带 %f):

%Y%m%d %H:%M:%S

我可以快速地从日期时间对象 %s 转换为没有 %s 的日期时间对象吗?

目前我正在使用以下代码:

df['TIME_S']=df.TIME_M.map(lambda t:t.strftime('%Y%m%d %H:%M:%S'))

但是,对于 pandas 来说,转换为字符串似乎是一个相当慢的操作。我想知道是否有一种快速的方法来进行转换,同时将转换的输出保留为日期时间对象?

附注假设我已经有格式为 %Y%m%d %H:%M:%S.%fdf['TIME_M']

最佳答案

首先,如果需要日期时间格式与需要不同 - YYYY-MM-DD HH:MM:SS

如果需要不带 %f 的日期时间,请添加 floor :

df['TIME_M'] = pd.to_datetime(df['TIME_M'], format='%Y%m%d %H:%M:%S.%f').dt.floor('s')
#if datetimes column
#df['TIME_M'] = df['TIME_M'].dt.floor('s')

或者转换为 numpy 值 ant 然后秒:

df['TIME_M'] = pd.to_datetime(df['TIME_M'],format='%Y%m%d %H:%M:%S.%f').values.astype('datetime64[s]')
#if datetimes column
#df['TIME_M'] = df['TIME_M'].values.astype('datetime64[s]')

或者在列表理解中拆分:

df['TIME_M'] = pd.to_datetime([x.split('.')[0] for x in df['TIME_M']], format='%Y%m%d %H:%M:%S')

示例数据中的时间:

N = 100000
df = pd.DataFrame({'TIME_M':['20190913 04:04:20'] * N})
df['TIME_M'] += ['.{}'.format(x) for x in range(1, len(df)+1)]


df['TIME_M1'] = pd.to_datetime(df['TIME_M'],format='%Y%m%d %H:%M:%S.%f').dt.floor('s')
df['TIME_M2'] = pd.to_datetime([x.split('.')[0] for x in df['TIME_M']], format='%Y%m%d %H:%M:%S')
df['TIME_M3'] = pd.to_datetime(df['TIME_M'],format='%Y%m%d %H:%M:%S.%f').values.astype('datetime64[s]')

#print (df)

In [180]: %timeit df['TIME_M3'] = pd.to_datetime(df['TIME_M'],format='%Y%m%d %H:%M:%S.%f').values.astype('datetime64[s]')
28.2 ms ± 358 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [181]: %timeit df['TIME_M1'] = pd.to_datetime(df['TIME_M'],format='%Y%m%d %H:%M:%S.%f').dt.floor('s')
28.7 ms ± 208 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [182]: %timeit df['TIME_M2'] = pd.to_datetime([x.split('.')[0] for x in df['TIME_M']], format='%Y%m%d %H:%M:%S')
69 ms ± 1.81 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

感谢另外 2 个解决方案,@Anton vBR:

In [187]: %timeit df['TIME_M4'] = pd.to_datetime(df['TIME_M'].str[:17], format='%Y%m%d %H:%M:%S')
58 ms ± 709 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [188]: %timeit df['TIME_M5'] = pd.to_datetime([x[:17] for x in df['TIME_M']], format='%Y%m%d %H:%M:%S')
45.6 ms ± 536 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

关于python - Pandas 转换日期时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51232664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com