我有2个数据框。第一个数据帧具有数字作为索引。第二个数据帧具有日期时间作为索引。切片运算符(:)在这些数据帧上的行为不同。
情况1
>>> df = pd.DataFrame({'A':[1,2,3]}, index=[0,1,2])
>>> df
A
0 1
1 2
2 3
>>> df [0:2]
A
0 1
1 2
Run Code Online (Sandbox Code Playgroud)
情况二
>>> a = dt.datetime(2000,1,1)
>>> b = dt.datetime(2000,1,2)
>>> c = dt.datetime(2000,1,3)
>>> df = pd.DataFrame({'A':[1,2,3]}, index = [a,b,c])
>>> df
A
2000-01-01 1
2000-01-02 2
2000-01-03 3
>>> df[a:b]
A
2000-01-01 1
2000-01-02 2
Run Code Online (Sandbox Code Playgroud)
为什么在情况1中排除了最后一行,而在情况2中却排除了呢?
不要使用它,更好的是loc用于一致性:
df = pd.DataFrame({'A':[1,2,3]}, index=[0,1,2])
print (df.loc[0:2])
A
0 1
1 2
2 3
a = datetime.datetime(2000,1,1)
b = datetime.datetime(2000,1,2)
c = datetime.datetime(2000,1,3)
df = pd.DataFrame({'A':[1,2,3]}, index = [a,b,c])
print (df.loc[a:b])
A
2000-01-01 1
2000-01-02 2
Run Code Online (Sandbox Code Playgroud)
原因,为什么省略最后一行可以在docs中找到:
使用DataFrame,在[]内切片将对行进行切片。由于这是一种常见的操作,因此很大程度上是为了方便而提供。
print (df[0:2])
A
0 1
1 2
Run Code Online (Sandbox Code Playgroud)
为了按日期时间进行选择,使用了精确的索引:
...相反,使用Timestamp或datetime对象建立索引是准确的,因为这些对象具有确切的含义。这些还遵循包括两个端点的语义。
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |