【发布时间】:2019-10-27 04:49:33
【问题描述】:
所以,df['date'] 返回:
0 2018-03-01
1 2018-03-01
2 2018-03-01
3 2018-03-01
4 2018-03-01
...
469796 2018-06-20
469797 2018-06-20
469798 2018-06-27
469799 2018-06-27
469800 2018-12-06
Name: date, Length: 469801, dtype: datetime64[ns]
然后,df['date'].sort_values() 返回:
137241 2018-01-01
378320 2018-01-01
247339 2018-01-01
34333 2018-01-01
387971 2018-01-01
...
109278 2018-12-06
384324 2018-12-06
384325 2018-12-06
109282 2018-12-06
469800 2018-12-06
Name: date, Length: 469801, dtype: datetime64[ns]
现在df['date'].sort_values()[0]“忽略排序”并返回:
Timestamp('2018-03-01 00:00:00')
而 df['date'].sort_values()[0:1] 实际返回:
137241 2018-01-01
Name: date, dtype: datetime64[ns]
为什么显然行为不一致?正如@cs95 准确指出的那样,它们分别返回一个标量和一个系列,这没关系。我对值感到困惑,第一个是2018-03-01,而第二个是2018-01-01。
提前致谢。
警告
有点类似于:why sort_values() is diifferent form sort_values().values
【问题讨论】:
-
在我设置示例之前,
df['date'].sort_values().iloc[0:1, :]。这样做是否符合预期? -
呃...不,错误:
Too many indexers -
df['date'].sort_values()[0]返回一个标量,df['date'].sort_values()[0:1]返回一个系列。你必须先了解 python 的列表切片符号是如何工作的。 -
@cs95 感谢您抽出宝贵时间回复,但我仍然看不出您的评论有什么帮助。或许你可以详细说明一下?
-
这是 pandas 的奇怪之处之一。
df['date'].sort_values()[0]实际上对系列进行了排序,但是您不要求在第一个位置 (0) 的项目,而是要求“标记”为 0 的项目 - 原始系列中的第一个项目。您可以将其替换为df['date'].sort_values().iloc[0]。