Python熊猫:如何使用13位时间戳分割数据帧

Python熊猫:如何使用13位时间戳分割数据帧,python,pandas,Python,Pandas,我有以下数据帧: DateTime Seq timestamp 1475504294990,10/03/2016 10:18:14:990000,2123847 1475504446660,10/03/2016 10:20:46:660000,2123908 1475504524410,10/03/2016 10:22:04:410000,2123953 1475504848100,10/03/2016 10:27:28:10000

我有以下数据帧:

              DateTime                   Seq
timestamp
1475504294990,10/03/2016 10:18:14:990000,2123847
1475504446660,10/03/2016 10:20:46:660000,2123908
1475504524410,10/03/2016 10:22:04:410000,2123953
1475504848100,10/03/2016 10:27:28:100000,2124067
1475504940530,10/03/2016 10:29:00:530000,2124126
我想使用开始和结束时间戳对这个数据帧进行切片

start = 1475504446660
end = 1475504848100
print df[start:end]
              DateTime                   Seq
timestamp
1475504446660,10/03/2016 10:20:46:660000,2123908
1475504524410,10/03/2016 10:22:04:410000,2123953
1475504848100,10/03/2016 10:27:28:100000,2124067
但是,我遇到了以下错误:

IndexError: failed to coerce slice entry of type long to integer

我尝试使用df[int(start):int(end)],仍然得到相同的错误来切片。您必须将时间戳定义为索引,并使用
loc
执行标签索引(否则整数索引的位置和标签索引之间不明确)

默认情况下,对于
整数
索引,索引是按位置而不是按标签进行的,请参见本例中的结果

df[0:2] # equivalent to df.iloc[0:2]

#                                  DateTime      Seq
# timestamp                                         
# 1475504294990  10/03/2016 10:18:14:990000  2123847
# 1475504446660  10/03/2016 10:20:46:660000  2123908
注 如果不想将
时间戳
定义为索引,可以使用此语法获得相同的结果

df.query('@start <= timestamp <= @end')

#        timestamp                    DateTime      Seq
# 1  1475504446660  10/03/2016 10:20:46:660000  2123908
# 2  1475504524410  10/03/2016 10:22:04:410000  2123953
# 3  1475504848100  10/03/2016 10:27:28:100000  2124067

df.query('@start您需要将开始和结束时间戳转换为实际的时间戳对象,还需要将索引转换为时间戳,然后用括号选择

df.index = pd.to_datetime(df.index, unit='ms')
start = pd.to_datetime(1475504446660, unit='ms')
end = pd.to_datetime(1575504848100, unit='ms')
df[start:end]
输出

                                           DateTime      Seq
timestamp                                                   
2016-10-03 14:20:46.660  10/03/2016 10:20:46:660000  2123908
2016-10-03 14:22:04.410  10/03/2016 10:22:04:410000  2123953
2016-10-03 14:27:28.100  10/03/2016 10:27:28:100000  2124067

没有。我会调查的。谢谢你的提示。
                                           DateTime      Seq
timestamp                                                   
2016-10-03 14:20:46.660  10/03/2016 10:20:46:660000  2123908
2016-10-03 14:22:04.410  10/03/2016 10:22:04:410000  2123953
2016-10-03 14:27:28.100  10/03/2016 10:27:28:100000  2124067