Python Pandas: 用日期时间列表覆盖索引 objects

Python Pandas: Overwriting an Index with a list of datetime objects

我在 header 中有一个带有时间戳的输入 CSV,就像这样(形成列的时间戳数有几千个):

header1;header2;header3;header4;header5;2013-12-30CET00:00:00;2013-12-30CET00:01:00;...;2014-00-01CET00:00:00

在 Pandas 0.12 中,我能够做到这一点,将字符串时间戳转换为日期时间 objects。以下代码删除时间戳字符串 (translate()) 中的 'CEST',将其作为日期时间 (strptime()) 读入,然后将其本地化到正确的时区 (localize() ) [采用这种方法的原因是,至少在我拥有的版本中,CEST 未被识别为时区]。

DF = pd.read_csv('some_csv.csv',sep=';')
transtable = string.maketrans(string.uppercase,' '*len(string.uppercase))
tz = pytz.country_timezones('nl')[0]
timestamps = DF.columns[5:]
timestamps = map(lambda x:x.translate(transtable), timestamps)
timestamps = map(lambda x:datetime.datetime.strptime(x, '%Y-%m-%d %H:%M:%S'), timestamps)
timestamps = map(lambda x: pytz.timezone(tz).localize(x), timestamps)
DF.columns[5:] = timestamps

但是,我的下游代码要求我 运行 off of pandas 0.16 在 0.16 上 运行ning 时,我在上述代码段的最后一行收到上述代码的错误:

*** TypeError: Indexes does not support mutable operations

我正在寻找一种方法来用日期时间 object 覆盖我的索引。使用方法 to_datetime() 对我不起作用,返回:

*** ValueError: Unknown string format

我有一些后续代码可以复制然后删除此数据框中的前几列数据(所有'header1;header2,header3'只留下时间戳。目的是转置,并按时间戳索引。

那么,我的问题是:

或者: 我怎样才能用日期时间覆盖一系列列名,这样我就可以传入一组 pre-arranged 时间戳,pandas 将能够将其识别为后续代码中的时间戳(在 pandas v0.16) 或者: 任何其他达到相同效果的建议。

我探索了 set_index()replace()to_datetime()reindex() 以及其他一些可能但似乎无法实现此覆盖。希望这很容易做到,我只是遗漏了一些东西。

TIA

我最终通过以下方式解决了这个问题:

问题是我有几千列 header 带有时间戳,我无法直接解析为日期时间 objects。

因此,为了合并这些时间戳 objects,我添加了一个名为 'Time' 的新列,然后在其中包含日期时间 objects,然后将索引设置为新列(我省略了通过 drop() 方法清除其他 header 数据行的代码:

    DF = DF.transpose()  
    DF['Time'] = timestamps 
    DF = DF.set_index('Time') 

总结:如果您的 header 中有一个 CSV 文件,其中包含一组您无法解析的时间戳;解决此问题的一种方法是分别解析它们,将正确的日期时间 objects 包含在新的时间列中,然后根据新列 set_index()