如何从python中的字符串创建日期时间索引?
Posted
技术标签:
【中文标题】如何从python中的字符串创建日期时间索引?【英文标题】:How to create datetime index from string in python? 【发布时间】:2019-10-20 15:32:36 【问题描述】:共有三个文件名:file_2018-01-01_01_temp.tif
、file_2018-01-01_02_temp.tif
和 file_2018-01-01_03_temp.tif
。我想在 python 中将它们的名称列为['2018010101', '2018010102', '2018010103']
。
下面的代码创建了一个不正确的列表。
import pandas as pd
from glob import glob
from os import path
pattern = '*.tif'
filenames = [path.basename(x) for x in glob(pattern)]
pd.DatetimeIndex([pd.Timestamp(f[5:9]) for f in filenames])
结果:
DatetimeIndex(['2018-01-01', '2018-01-01', '2018-01-01']
【问题讨论】:
【参考方案1】:我认为最简单的方法是在列表理解中使用替换进行索引:
a = [f[5:18].replace('_','').replace('-','') for f in filenames]
print (a)
['2018010101', '2018010102', '2018010103']
与Series.str.replace
类似:
a = pd.Index([f[5:18] for f in filenames]).str.replace('\-|_', '')
print (a)
Index(['2018010101', '2018010102', '2018010103'], dtype='object')
或者将值转换为DatetimeIndex
,然后使用DatetimeIndex.strftime
:
a = pd.to_datetime([f[5:18] for f in filenames], format='%Y-%m-%d_%H').strftime('%Y%m%d%H')
print (a)
Index(['2018010101', '2018010102', '2018010103'], dtype='object')
编辑:
dtype 在 object 中,但必须在 dtype='datetime64[ns]
如果需要日期时间,那么格式必须是默认的,不能改变它:
d = pd.to_datetime([f[5:18] for f in filenames], format='%Y-%m-%d_%H')
print (d)
DatetimeIndex(['2018-01-01 01:00:00', '2018-01-01 02:00:00',
'2018-01-01 03:00:00'],
dtype='datetime64[ns]', freq=None)
【讨论】:
嗨@jezrael,dtype 在object
,但它必须在dtype='datetime64[ns]
。以上是关于如何从python中的字符串创建日期时间索引?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Lua NodeMCU 中的日期和时间字符串创建日期对象?
Python Pandas Dataframe 将特定的日期时间行标签设置为索引中的字符串?