删除多组时间戳之间的行

时间:2019-01-24 05:04:44

标签: python python-3.x pandas dataframe

我有一个带有(yyyy-mm-dd hh:mm:ss)形式的时间戳的DataFrame。我正在尝试删除两个不同时间戳之间的数据。目前,我可以删除1个时间戳范围之间的数据,但无法将其扩展到多个时间戳。

例如,使用DataFrame我可以删除一定范围的行(例如2015-03-01 00:20:00到2015-08-01 01:10:00),但是我不确定该怎么做关于删除旁边的另一个范围。执行该操作的代码如下所示。

index_list= df.timestamp[(df.timestamp >= "2015-07-01 00:00:00") & (df.timestamp <= "2015-12-30 23:50:00")].index.tolist()

df1.drop(df1.index[index_list1, inplace = True)

DataFrame的使用期限为3年,其中包括3年中的每一天。 我正在尝试删除所有3年的7月至12月(2015-07-01 00:00:00至2015-12-30 23:50:00)月份的所有行。

我当时想创建一个帮助列,该列从“日期”列中获取“月”,然后从“帮助”列中的“月”删除。

我将不胜感激任何建议。谢谢!

编辑: 我添加了一个小的汇总版本的DataFrame。这就是初始DataFrame的样子。

df    Date                   v
    2015-01-01 00:00:00     30.0
    2015-02-01 00:10:00     55.0
    2015-03-01 00:20:00     36.0
    2015-04-01 00:30:00     65.0
    2015-05-01 00:40:00     35.0
    2015-06-01 00:50:00     22.0
    2015-07-01 01:00:00     74.0
    2015-08-01 01:10:00     54.0
    2015-09-01 01:20:00     86.0
    2015-10-01 01:30:00     91.0
    2015-11-01 01:40:00     65.0
    2015-12-01 01:50:00     35.0

要得到这样的东西

df    Date                   v
    2015-01-01 00:00:00     30.0
    2015-02-01 00:10:00     55.0
    2015-03-01 00:20:00     36.0
    2015-05-01 00:40:00     35.0
    2015-06-01 00:50:00     22.0
    2015-11-01 01:40:00     65.0
    2015-12-01 01:50:00     35.0

时间戳记为“ 2015-07-01 00:20:00至2015-10-01 00:30:00”和“ 2015-07-01 01:00:00至2015-10-01 01:30” :00“已删除。抱歉,如果我的格式不符合标准。

2 个答案:

答案 0 :(得分:3)

如果您的时间戳列使用正确的dtype,则可以执行以下操作:

df.loc[df.timestamp.dt.month.isin([1, 2, 3, 5, 6, 11, 12])]

这应该过滤掉不在列表中的月份。

答案 1 :(得分:1)

正如您所暗示的那样,当您使用正确的数据类型时,数据操作总是更加容易。为了支持时间戳,熊猫具有Timestamp类型。您可以按照以下步骤进行操作:

df['Date'] = pd.to_datetime(df['Date'])  # No date format needs to be specified,
                                         # "YYYY-MM-DD HH:MM:SS" is the standard

然后,删除所有年份的7月到12月的所有条目很简单:

df = df[df['Date'].dt.month < 7]  # Keep only months less than July