如何在数据框中为 Pandas 日期时间对象正确设置 Datetimeindex?
Posted
技术标签:
【中文标题】如何在数据框中为 Pandas 日期时间对象正确设置 Datetimeindex?【英文标题】:How do I properly set the Datetimeindex for a Pandas datetime object in a dataframe? 【发布时间】:2015-01-17 20:51:13 【问题描述】:我有一个熊猫数据框:
lat lng alt days date time
0 40.003834 116.321462 211 39745.175405 2008-10-24 04:12:35
1 40.003783 116.321431 201 39745.175463 2008-10-24 04:12:40
2 40.003690 116.321429 203 39745.175521 2008-10-24 04:12:45
3 40.003589 116.321427 194 39745.175579 2008-10-24 04:12:50
4 40.003522 116.321412 190 39745.175637 2008-10-24 04:12:55
5 40.003509 116.321484 188 39745.175694 2008-10-24 04:13:00
为此,我尝试将 df['date'] 和 df['time'] 列转换为日期时间。我能做到:
df['Datetime'] = pd.to_datetime(df['date']+df['time'])
df = df.set_index(['Datetime'])
del df['date']
del df['time']
我得到:
lat lng alt days
Datetime
2008-10-2404:12:35 40.003834 116.321462 211 39745.175405
2008-10-2404:12:40 40.003783 116.321431 201 39745.175463
2008-10-2404:12:45 40.003690 116.321429 203 39745.175521
2008-10-2404:12:50 40.003589 116.321427 194 39745.175579
2008-10-2404:12:55 40.003522 116.321412 190 39745.175637
但是如果我尝试:
df.between_time(time(1),time(22,59,59))['lng'].std()
我收到一个错误 - 'TypeError: Index must be DatetimeIndex'
所以,我也尝试过设置 DatetimeIndex:
df['Datetime'] = pd.to_datetime(df['date']+df['time'])
#df = df.set_index(['Datetime'])
df = df.set_index(pd.DatetimeIndex(df['Datetime']))
del df['date']
del df['time']
这也会引发错误 - 'DateParseError: unknown string format'
如何正确创建 datetime 列和 DatetimeIndex 以便 df.between_time() 正常工作?
【问题讨论】:
“DateParseError: unknown string format”是因为“DD”和“HH”相邻,所以无法识别“2008-10-2404:12:35”格式。 【参考方案1】:您没有正确创建日期时间索引,
format = '%Y-%m-%d %H:%M:%S'
df['Datetime'] = pd.to_datetime(df['date'] + ' ' + df['time'], format=format)
df = df.set_index(pd.DatetimeIndex(df['Datetime']))
【讨论】:
【参考方案2】:为了简化Kirubaharan's answer:
df['Datetime'] = pd.to_datetime(df['date'] + ' ' + df['time'])
df = df.set_index('Datetime')
并删除不需要的列(正如 OP 所做的但未在问题中指定本身):
df = df.drop(['date','time'], axis=1)
【讨论】:
所以这里的技巧是在日期和时间之间添加一个空格,然后pd.to_datetime()
使用结果字符串做正确的事情吗?【参考方案3】:
这对我来说效果最好:
format = '%Y-%m-%d%H:%M:%S'
df['Datetime'] = pd.to_datetime(df['date'] + df['time'].astype("string"), format=format)
在某些情况下,Python 将 df['date']
视为整数列。
【讨论】:
以上是关于如何在数据框中为 Pandas 日期时间对象正确设置 Datetimeindex?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Pandas 将数据框中的 Python 对象列转换为没有日期的时间