【发布时间】:2015-07-02 08:22:21
【问题描述】:
我有一个像这样在标题中带有时间戳的输入 CSV(形成列的时间戳数为数千):
header1;header2;header3;header4;header5;2013-12-30CET00:00:00;2013-12-30CET00:01:00;...;2014-00-01CET00:00:00
在 Pandas 0.12 中,我能够做到这一点,将字符串时间戳转换为日期时间对象。以下代码去除时间戳字符串 (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
但是,我的下游代码要求我运行 pandas 0.16 在 0.16 上运行时,我在上述 sn-p 的最后一行使用上述代码收到此错误:
*** TypeError:索引不支持可变操作
我正在寻找一种方法来用 datetime 对象覆盖我的索引。使用方法to_datetime() 对我不起作用,返回:
*** ValueError: 未知的字符串格式
我有一些后续代码复制,然后删除此数据帧中的前几列数据(所有'header1; header2,header3'只留下时间戳。目的是然后转置,并按时间戳索引.
所以,我的问题:
要么: 如何用日期时间覆盖一系列列名,以便我可以传入一组预先安排的时间戳,熊猫将能够在后续代码中识别为时间戳(在熊猫 v0.16 中) 要么: 达到相同效果的任何其他建议。
我已经探索了 set_index()、replace()、to_datetime() 和 reindex() 以及可能的其他一些,但似乎无法实现这种覆盖。希望这很简单,我只是错过了一些东西。
TIA
【问题讨论】:
-
最好有 csv 的前几行和几列(这样我们就可以试用代码)。
标签: python datetime indexing pandas