我第一次使用熊猫很难
我的数据框包含分隔列中的年,月,日和小时。
据我所知,此数据框未编入索引。
我正在尝试为此数据框创建一个日期时间索引:
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')
我做错了什么?
答案 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')