在Pandas中创建DateTimeIndex

时间:2016-04-08 17:50:11

标签: python datetime pandas

我第一次使用熊猫很难

我的数据框包含分隔列中的年,月,日和小时。

据我所知,此数据框未编入索引。

我正在尝试为此数据框创建一个日期时间索引:

def createTimeStamp(year, month, day, hour): 
    return DatetimeIndex(datetime(.........))

df['TimeStamp'] = df.apply(createTimeStamp(df['year'], df['month'], df['day'], df['hour']))

df.set_index('TimeStamp')

我做错了什么?

2 个答案:

答案 0 :(得分:3)

import datetime as dt
import pandas as pd

df = pd.DataFrame({'year': [2015, 2016], 
                   'month': [12, 1], 
                   'day': [31, 1], 
                   'hour': [23, 1]})

# returns datetime objects
df['Timestamp'] = df.apply(lambda row: dt.datetime(row.year, row.month, row.day, row.hour), 
                           axis=1)

# converts to pandas timestamps if desired
df['Timestamp'] = pd.to_datetime(df.Timestamp)

>>> df
   day  hour  month  year           Timestamp
0   31    23     12  2015 2015-12-31 23:00:00
1    1     1      1  2016 2016-01-01 01:00:00

# Create a DatetimeIndex and assign it to the dataframe.
df.index = pd.DatetimeIndex(df.Timestamp)

>>> df
                     day  hour  month  year           Timestamp
2015-12-31 23:00:00   31    23     12  2015 2015-12-31 23:00:00
2016-01-01 01:00:00    1     1      1  2016 2016-01-01 01:00:00

答案 1 :(得分:2)

问题是set_index会修改DataFrame的副本。如果将inplace = True传递给set_index,则会更新原始DataFrame。或者,如果需要更多操作,可以重新分配DataFrame

df.set_index('TimeStamp', inplace=True)

df = df.set_index('TimeStamp')