我正在开发一个函数,它将数据集的时间戳(加载了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。日期时间?
答案 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
意思是我认为我遇到的问题根本不是问题......