Pandas DatetimeIndex 索引数据类型:datetime64 与时间戳
Pandas DatetimeIndex indexing dtype: datetime64 vs Timestamp
索引一个 pandas DatetimeIndex(使用 dtype numpy datetime64[ns])returns 要么:
- 多个索引的另一个 DatetimeIndex
- a pandas 单个索引的时间戳
令人困惑的部分是时间戳不等于 np.datetime64,因此:
import numpy as np
import pandas as pd
a_datetimeindex = pd.date_range('1/1/2016', '1/2/2016', freq = 'D')
print np.in1d(a_datetimeindex[0], a_datetimeindex)
Returns 错误。但是:
print np.in1d(a_datetimeindex[0:1], a_datetimeindex)
print np.in1d(np.datetime64(a_datetimeindex[0]), a_datetimeindex)
Returns 正确的结果。
我猜这是因为 np.datetime64[ns] 精确到纳秒,但时间戳被截断了?
我的问题是,有没有一种方法可以创建 DatetimeIndex,使其始终索引到相同(或可比)的数据类型?
您正在使用 numpy 函数来操作 pandas 类型。它们并不总是兼容的。
函数np.in1d
首先将它的两个参数都转换为ndarrays。 DatetimeIndex
有一个内置的转换,返回一个 dtype np.datetime64
的数组(它是 DatetimIndex.values
)。但是 Timestamp
没有这样的设施,它没有被转换。
相反,您可以使用 python 关键字 in
(最自然的方式):
a_datetimeindex[0] in a_datetimeindex
或用于元素集合的Index.isin
方法
a_datetimeindex.isin(a_list_or_index)
如果您想使用 np.in1d
,请将两个参数显式转换为 numpy 类型。或者在底层的 numpy 数组上调用它:
np.in1d(a_datetimeindex.values[0], a_datetimeindex.values)
或者,将 np.in1d
与两个相同类型的集合一起使用可能是安全的:
np.in1d(a_datetimeindex, another_datetimeindex)
甚至
np.in1d(a_datetimeindex[[0]], a_datetimeindex)
索引一个 pandas DatetimeIndex(使用 dtype numpy datetime64[ns])returns 要么:
- 多个索引的另一个 DatetimeIndex
- a pandas 单个索引的时间戳
令人困惑的部分是时间戳不等于 np.datetime64,因此:
import numpy as np
import pandas as pd
a_datetimeindex = pd.date_range('1/1/2016', '1/2/2016', freq = 'D')
print np.in1d(a_datetimeindex[0], a_datetimeindex)
Returns 错误。但是:
print np.in1d(a_datetimeindex[0:1], a_datetimeindex)
print np.in1d(np.datetime64(a_datetimeindex[0]), a_datetimeindex)
Returns 正确的结果。
我猜这是因为 np.datetime64[ns] 精确到纳秒,但时间戳被截断了?
我的问题是,有没有一种方法可以创建 DatetimeIndex,使其始终索引到相同(或可比)的数据类型?
您正在使用 numpy 函数来操作 pandas 类型。它们并不总是兼容的。
函数np.in1d
首先将它的两个参数都转换为ndarrays。 DatetimeIndex
有一个内置的转换,返回一个 dtype np.datetime64
的数组(它是 DatetimIndex.values
)。但是 Timestamp
没有这样的设施,它没有被转换。
相反,您可以使用 python 关键字 in
(最自然的方式):
a_datetimeindex[0] in a_datetimeindex
或用于元素集合的Index.isin
方法
a_datetimeindex.isin(a_list_or_index)
如果您想使用 np.in1d
,请将两个参数显式转换为 numpy 类型。或者在底层的 numpy 数组上调用它:
np.in1d(a_datetimeindex.values[0], a_datetimeindex.values)
或者,将 np.in1d
与两个相同类型的集合一起使用可能是安全的:
np.in1d(a_datetimeindex, another_datetimeindex)
甚至
np.in1d(a_datetimeindex[[0]], a_datetimeindex)