我试图指定我想要评估csv数据的时间框架。
我认为使用datetime64将输入的日期转换为numpy.datetime64可以解决这个问题,但datetime64[ns, UTC]似乎是另一种格式。
这就是我尝试过的,我得到了上面的错误:dtype=datetime64[ns, UTC]和datetime64之间的无效比较。
如何将dtype转换为datetime64[ns UTC]或相反的方式?
这是代码:
df = pd.read_csv('/Users/youruser/Desktop/0b13c0f751243fda1229b7601db2c51c.csv', names=headers)
df['dt_iso'] = df['dt_iso'].map(lambda x: datetime.strptime(str(x), '%Y-%m-%d %H:%M:%S %z %Z'))
start_date = numpy.datetime64('2011-05-01T01:00:00.000000+0100')
end_date = numpy.datetime64('2012-05-01T01:00:00.000000+0100')
mask = (df['dt_iso'] > start_date) & (df['dt_iso'] <= end_date)
x = mask['dt_iso']
y = df['temp']提前感谢!
奖金问题:
df['dt_iso'] = df['dt_iso'].map(lambda x: datetime.strptime(str(x), '%Y-%m-%d %H:%M:%S %z %Z'))这一行代码到底是做什么的?据我所知,它从csv获取日期信息,从中生成一个dtype对象,然后将其映射到dt_iso值。datetime对象datetime64[ns UTC]的单位也是如此。
发布于 2022-02-09 13:36:16
把熊猫的datetime64[ns UTC]看作是numpy约会时间 (datetime64[...])的延伸,它还允许处理时区。如果一个类具有时区,而另一个类没有时区,则不可能进行直接比较。即使你一致地使用熊猫的日期时间,无论是日期序列都必须有一个tz定义(“tz感知”),或者两者都没有tz定义(“tz-朴素”)-是的,在这种情况下,UTC算作一个时区。
如果您与熊猫一起工作,并且您的输入日期/时间(例如,表示UTC),您可以.tz_localize到UTC,这样两个系列的比较都是tz感知的。
在您的示例中,您可以使用感知的pd.Timestamps;
df['dt_iso'] = pd.to_datetime(df['dt_iso']) # simplify, does not require Py datetime
# use pd.Timestamps for comparisons
start_date = pd.Timestamp('2011-05-01T01:00:00.000000+0100')
end_date = pd.Timestamp('2012-05-01T01:00:00.000000+0100')
mask = (df['dt_iso'] > start_date) & (df['dt_iso'] <= end_date)https://stackoverflow.com/questions/71050211
复制相似问题