将dataframe列转换为datetime以重新映射

时间:2016-04-18 22:17:03

标签: python datetime pandas

我有一堆天气数据需要重新映射到Pandas。 我正在努力转换第一栏#Time;#Time;#39;到日期时间索引。 我一直在扫描论坛,但无法解决问题。

以下是数据样本:

Time    TemperatureF    DewpointF

1/1/2015 0:01   31.7    27.1

1/1/2015 0:06   31.7    27.4

1/1/2015 0:11   31.6    27.3

1/1/2015 0:16   31.6    27.3

1/1/2015 0:21   31.5    26.9

1/1/2015 0:26   31.5    26.9

1/1/2015 0:31   31.5    26.9

这是我用来重新索引的代码的最新版本。

非常感谢任何帮助!

df = df.set_index('Time')
df.index = df.index.to_datetime()

3 个答案:

答案 0 :(得分:1)

尝试使用pd.to_datetime()代替df.index.to_datetime(),并将结果用作index

如果格式无法正确转换,则需要添加format参数,该参数使用these命名约定,例如format='%m/%d/%Y %H:%M'

df['Time'] = pd.to_datetime(df[['Time']]) # Convert 'Time' column to datetime, possibly using format keyword
df.set_index(df.Time, inplace=True) # set result as index

答案 1 :(得分:1)

我认为您可以尝试to_datetimeset_index

print df
            Time  TemperatureF  DewpointF
0  1/1/2015 0:01          31.7       27.1
1  1/1/2015 0:06          31.7       27.4
2  1/1/2015 0:11          31.6       27.3
3  1/1/2015 0:16          31.6       27.3
4  1/1/2015 0:21          31.5       26.9
5  1/1/2015 0:26          31.5       26.9
6  1/1/2015 0:31          31.5       26.9

#check column names
print df.columns
Index([u'Time', u'TemperatureF', u'DewpointF'], dtype='object')

#first number is month
df['Time'] = pd.to_datetime(df['Time'], format='%m/%d/%Y %H:%M') #no double []

df.set_index('Time', inplace=True)
print df
                     TemperatureF  DewpointF
Time                                        
2015-01-01 00:01:00          31.7       27.1
2015-01-01 00:06:00          31.7       27.4
2015-01-01 00:11:00          31.6       27.3
2015-01-01 00:16:00          31.6       27.3
2015-01-01 00:21:00          31.5       26.9
2015-01-01 00:26:00          31.5       26.9
2015-01-01 00:31:00          31.5       26.9

print df.index
DatetimeIndex(['2015-01-01 00:01:00', '2015-01-01 00:06:00',
               '2015-01-01 00:11:00', '2015-01-01 00:16:00',
               '2015-01-01 00:21:00', '2015-01-01 00:26:00',
               '2015-01-01 00:31:00'],
              dtype='datetime64[ns]', name=u'Time', freq=None)

如果仍为ValueError,请尝试添加参数errors='coerce',以便将不匹配格式的字符串转换为NaT

df['Time'] = pd.to_datetime(df['Time'], format='%d/%m/%Y %H:%M', errors='coerce')

答案 2 :(得分:1)

df.set_index(pd.DatetimeIndex(pd.to_datetime(df.Time)), inplace=True)