为什么级数[0]和级数[0:1]产生不同的结果?

2024-10-03 09:12:29 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,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


Tags: name警告dfdate排序sortlengthtimestamp
1条回答
网友
1楼 · 发布于 2024-10-03 09:12:29

对于标量索引和切片,熊猫的索引解释方式略有不同。举个简单的例子:

df = pd.DataFrame({'col1': [5, 4, 3, 2, 1]}).sample(frac=1)
df
   col1
4     1
1     4
0     5
3     2
2     3

还要注意sort_values的结果:

df['col1'].sort_values()
4    1
3    2
2    3
1    4
0    5

当您调用df['col1'].sort_values()[0]时,实际上会得到由键0索引的值。这里它隐式地调用loc

df['col1'].sort_values()[0]     # just gets the value indexed by that key
# 5

df['col1'].sort_values().loc[0]
# 5

当使用索引进行切片时,假设它们是整数而不是标签,这意味着它隐式地调用iloc

df['col1'].sort_values()[0:1]   # just gets the first row  
4    1
Name: col1, dtype: int64


df['col1'].sort_values().iloc[0:1]
4    1
Name: col1, dtype: int64

如果希望标量索引操作返回与切片相同的内容,请使用ilociat(单数值):

df['col1'].sort_values().iloc[0]
# 1

df['col1'].sort_values().iat[0]
# 1

相关问题 更多 >