我有一个带有(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“已删除。抱歉,如果我的格式不符合标准。
答案 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