用datetime模块替换Pandas Timestamp

时间:2017-09-22 15:40:52

标签: python pandas datetime

我正在开发一个函数,它将数据集的时间戳(加载了Pandas的CSV文件)从本地时间转换为UTC。为此,我想使用datetime模块,因为我在其他函数和脚本中使用它而不一定用Pandas加载数据集。

例如,数据集如下所示:

dtg(local)  temperature  wind speed
2017092003     17.3          7.8
2017092004     17.5          12.4
2017092005     17.6          9.2

其中dtg是pandas Dataframe索引(yyyymmddHH)。有问题的地点是UTC + 1,夏季夏令时,所以时间应该低2小时。我使用一个利用datetime模块来纠正这个时间差的函数(函数的这部分工作得很好)。此函数返回日期时间对象列表(new_index)。我希望将此列表指定为Dataframe索引,如下所示:

new_index = times_to_utc(df.index_tolist())
df.set_index([new_index], inplace=True)

但是当我稍后检查数据类型时,会给出:

in[1]: print(new_index[3], type(new_index[3])
out[1]: 2017-09-20 03:00:00 <class 'datetime.datetime'>

in[2]: print(df.index[3], type(df.index[3])
out[2]: 2017-09-20 03:00:00 <class 'pandas._libs.tslib.Timestamp'>

为什么Pandas会自动将其转换为Pandas时间戳?这非常不方便,因为其他函数依赖于输入是日期时间对象。我可以将索引的日期类型更改为datetime。日期时间?

1 个答案:

答案 0 :(得分:0)

我刚刚通过一些测试发现pandas时间戳可以与datetime对象进行比较:

in[0]: import pandas as pd
  ...: from datetime import datetime
  ...: df = pd.DataFrame(index=["2017 09 25 12"], columns=["column"])
  ...: df.index = [datetime.strptime(t, "%Y %m %d %H") for t in df.index]
  ...: print(df.index[0], type(df.index[0]))
  ...: print(df.index[0] == datetime(2017, 9, 25, 12))
  ...: print(isinstance(df.index[0], datetime))

out[0]: 2017-09-25 12:00:00 <class 'pandas._libs.tslib.Timestamp'>
   ...: True
   ...: True

意思是我认为我遇到的问题根本不是问题......