2016-04-08 78 views
1

我第一次使用熊貓的難度很大在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
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 
+0

工作就好了! – guilhermecgs

2

問題是set_index修改了DataFrame的副本。如果你將inplace = True傳遞給set_index,則原來的DataFrame將被更新。或者數據幀可以被重新分配,如果更多的操作需要

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

df = df.set_index('TimeStamp')

+0

set_index評論是相關的這個問題 – guilhermecgs

相關問題