【发布时间】:2020-10-12 21:56:19
【问题描述】:
我有一个 pandas DataFrame,其中一列是出租车的行程距离。我在用着
value_counts() 在此列中查看最常见的出行距离。
b = df['trip_distance'].value_counts()
对象 b 是一个熊猫系列对象。为了完整起见,这个系列的前5行是
1.00 21815
0.90 18915
0.80 18449
1.10 18263
1.20 17823
这意味着最常见的行程距离是 1,它出现了 21815 次,其余的都一样。
但是,如果我键入 b[0:4] 而不是打印此系列的前 4 个元素,它会找到与 0 行程距离对应的元素,并开始打印所有行程距离,直到达到行程距离 4。当然,如果行程距离 4 在行程距离 0 之前,则返回一个空系列。
不过,当我在自定义系列上尝试时
a = pd.Series([3, 1, 2, 3, 4, 4, 5]).value_counts()
打印a给
4 2
3 2
5 1
2 1
1 1
当我尝试分割这个系列时,也就是说,当我输入 a[0, 3] 时,我得到了预期
4 2
3 2
5 1
有人知道为什么会这样吗? 我知道这可以通过 iloc/loc 完成,我只是好奇为什么切片在一个列表中有效,而在另一个列表中无效。
提前致谢。
【问题讨论】:
-
我认为不同之处在于索引的类型,尝试使用
c = pd.Series([3, 1, 2, 3, 4, 4, 5]).astype(float).value_counts()与第一个示例中的类型相同,然后c[0:3]你会得到一个错误,因为 0 没有存在。但是如果你做a[1:3]和c[1:3],你会看到区别,即使a和c几乎是同一个系列 -
我不知道是什么导致了问题,但解决方案可能是使用iloc。
-
@Ben.T 是的,这是非常正确的,感谢您的指出。你对它为什么会这样表现有任何线索吗?好吧,这可能只是我猜的默认方式。
-
@ThePhoton 感谢您的建议。是的 iloc 是最好的方法,我只是偶然发现了这种特殊性,我不确定它为什么会发生。