我对熊猫比较陌生。当最初包含整数的索引被操纵以使其包含浮点数时,我偶然发现了切片pandas DataFrame的问题。请考虑以下示例(有些人设法使其独立;实际上,数据是从文件加载的):
df = pd.DataFrame({'i': np.linspace(0, 5, 6).astype(np.int64),
'j': np.linspace(2, 3, 6)})
df.set_index('i', inplace=True)
print(df.index) # Int64Index([0, 1, 2, 3, 4, 5], dtype='int64')
df.index = df.index / 10.
print(df.index) # Int64Index([0.0, 0.1, 0.2, 0.3, 0.4, 0.5], dtype='float64')
df[:0.3]
最后一行提出了这个例外:
TypeError: the slice stop value [None] is not a proper indexer
for this index type (Int64Index)
虽然使用
的明确演员来解决这个问题相对容易df.index = np.asarray(df.index, dtype=np.float64) / 10.
我花了很长时间才弄明白发生了什么。我希望在原始代码中发生的是索引将成为Float64Index
或类似的东西。当我第一次注意到Int64Index
与dtype=float
时,我认为这很奇怪。是否有一些我应该遵循的最佳实践或类似措施来避免这个问题?
我的pandas版本在python 3.4上是0.15.2。