如何切片熊猫日期时间索引以始终选择第一天

时间:2020-03-09 15:27:28

标签: python pandas datetime

如果我有一个看起来像这样的数据框:

timestamp            lat        lon             sog                                     
2018-12-22 08:03:15  54.917200  13.358867      10.8                     
2018-12-22 08:04:05  54.916350  13.354700      10.8                     
2018-12-22 08:04:53  54.915533  13.350767      10.7  
2018-12-24 08:03:15  57.917200  9.358867       10.8                     
2018-12-24 08:04:05  57.916350  9.354700       10.8                     
2018-12-26 08:04:53  59.915533  5.350767       10.7                     

我想对df进行切片,以便仅使用第一天的信息。如果我知道日期,就可以

first_day = df.loc['2018-12-22']

但是我想对许多.csv文件自动执行此操作,并且它们都有不同的开始日期。有没有办法切片Datetime索引只获得第一天?像这样:

first_day = df.iloc[:day1] ?

最终得到:

timestamp            lat        lon             sog                                     
2018-12-22 08:03:15  54.917200  13.358867      10.8                     
2018-12-22 08:04:05  54.916350  13.354700      10.8                     
2018-12-22 08:04:53  54.915533  13.350767      10.7  

2 个答案:

答案 0 :(得分:0)

您可以找到第一天(最短日期)并使用布尔索引:

for df in df_list:
    days = df.index.normalize()
    min_date = days.min()
    df[days == min_date]

答案 1 :(得分:0)

您可以使用df中“时间戳”列的date部分中的最小值进行选择,例如

import pandas as pd

df = pd.DataFrame({'timestamp': ['2018-12-22 08:03:15',
                                 '2018-12-22 08:04:05',          
                                 '2018-12-22 08:04:53',
                                 '2018-12-24 08:03:15',               
                                 '2018-12-24 08:04:05',
                                 '2018-12-26 08:04:53'],
                   'lat':[54.917200,
                          54.916350,               
                          54.915533,
                          57.917200,             
                          57.916350,
                          59.915533]})

df['timestamp'] = pd.to_datetime(df['timestamp'])

df.loc[df.timestamp.dt.date == df.timestamp.dt.date.min()]
#             timestamp        lat
# 0 2018-12-22 08:03:15  54.917200
# 1 2018-12-22 08:04:05  54.916350
# 2 2018-12-22 08:04:53  54.915533