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()
。
我在 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()
。