当前位置: 首页 > 知识库问答 >
问题:

在特定日期和时间之前/之后截断错误

杨雪松
2023-03-14

我编写了一个函数,用于在给定范围之前或之后截断数据。我传入一个日期元组,位置1是开始日期,位置2是结束日期。

我如何也可以选择指定截断b4和b4之后的时间和日期-我将如何使用我的代码来做到这一点?*)

此外-我一直在我的数据上得到一个错误,说:

    raise InvalidIndexError('Reindexing only valid with uniquely'
pandas.core.indexes.base.InvalidIndexError: Reindexing only valid with uniquely valued Index
objects

我使用:

date_range = self.data.copy()
nearest_start = date_range.iloc[
            date_range.index.get_loc(datetime.datetime.strptime(split[0], '%m-%d-%Y'),
                     method='nearest')].name
...
date_range = date_range.truncate(before=nearest_start, after=nearest_end)

我的日期元组:

('12-29-2011','12-23-2017')

这是数据集的my df.head():

                               Open       H   ...                RBE1min        O
        DateTime                              ...                                
        2007-11-06 12:45:00 -0.6437 -0.6423   ...     11/6/2007 12:45.00  21198.0
        2007-11-06 14:30:00 -0.6430 -0.6425   ...     11/6/2007 14:30.00  21355.0
        2007-11-06 19:33:00 -0.6423 -0.6400   ...     11/6/2007 19:33.00  21430.0
        2007-11-07 09:00:00 -0.6434 -0.6421   ...     11/7/2007 09:00.00  21440.0
        2007-11-07 12:26:00 -0.6433 -0.6396   ...     11/7/2007 12:26.00  21392.0

我已经运行了下面的程序来检查索引中的dupilcates,它返回NAT,所以我不确定为什么我仍然得到这个错误

任何帮助都将不胜感激

dup = rbs4181.index.get_duplicates()

共有1个答案

路伟
2023-03-14

恐怕不是你想要的。但这可能会有所帮助:

我使用此数据集http://archive.ics.uci.edu/ml/datasets/Occupancy检测#进行测试。

对于datetime索引,解析为时间戳的日期和字符串可以作为索引参数传递,也可以作为truncatepd的参数之前和之后的传递。时间戳.

In [1]: import pandas as pd

In [2]: df = pd.read_csv('datatest2.txt', parse_dates=[1], index_col=[1])

In [3]: df.index
Out[3]:
DatetimeIndex(['2015-02-11 14:48:00', '2015-02-11 14:49:00',
               '2015-02-11 14:50:00', '2015-02-11 14:51:00',
               '2015-02-11 14:51:59', '2015-02-11 14:53:00',
               '2015-02-11 14:54:00', '2015-02-11 14:55:00',
               '2015-02-11 14:55:59', '2015-02-11 14:57:00',
               ...
               '2015-02-18 09:10:00', '2015-02-18 09:10:59',
               '2015-02-18 09:11:59', '2015-02-18 09:13:00',
               '2015-02-18 09:14:00', '2015-02-18 09:15:00',
               '2015-02-18 09:16:00', '2015-02-18 09:16:59',
               '2015-02-18 09:17:59', '2015-02-18 09:19:00'],
              dtype='datetime64[ns]', name='date', length=9752, freq=None)

In [4]: df['2015-02-12':'2015-02-13'].index
Out[4]:
DatetimeIndex(['2015-02-12 00:00:00', '2015-02-12 00:01:00',
               '2015-02-12 00:02:00', '2015-02-12 00:03:00',
               '2015-02-12 00:04:00', '2015-02-12 00:04:59',
               '2015-02-12 00:06:00', '2015-02-12 00:07:00',
               '2015-02-12 00:08:00', '2015-02-12 00:08:59',
               ...
               '2015-02-13 23:50:00', '2015-02-13 23:51:00',
               '2015-02-13 23:51:59', '2015-02-13 23:53:00',
               '2015-02-13 23:54:00', '2015-02-13 23:55:00',
               '2015-02-13 23:55:59', '2015-02-13 23:57:00',
               '2015-02-13 23:57:59', '2015-02-13 23:58:59'],
              dtype='datetime64[ns]', name='date', length=2880, freq=None)

In [5]: df.truncate(before=pd.Timestamp('2015-02-12'), after=pd.Timestamp('2015-02-14')).index
Out[5]:
DatetimeIndex(['2015-02-12 00:00:00', '2015-02-12 00:01:00',
               '2015-02-12 00:02:00', '2015-02-12 00:03:00',
               '2015-02-12 00:04:00', '2015-02-12 00:04:59',
               '2015-02-12 00:06:00', '2015-02-12 00:07:00',
               '2015-02-12 00:08:00', '2015-02-12 00:08:59',
               ...
               '2015-02-13 23:51:00', '2015-02-13 23:51:59',
               '2015-02-13 23:53:00', '2015-02-13 23:54:00',
               '2015-02-13 23:55:00', '2015-02-13 23:55:59',
               '2015-02-13 23:57:00', '2015-02-13 23:57:59',
               '2015-02-13 23:58:59', '2015-02-14 00:00:00'],
              dtype='datetime64[ns]', name='date', length=2881, freq=None)

In [6]: df.truncate(before='2015-02-12', after='2015-02-14').index
Out[6]:
DatetimeIndex(['2015-02-12 00:00:00', '2015-02-12 00:01:00',
               '2015-02-12 00:02:00', '2015-02-12 00:03:00',
               '2015-02-12 00:04:00', '2015-02-12 00:04:59',
               '2015-02-12 00:06:00', '2015-02-12 00:07:00',
               '2015-02-12 00:08:00', '2015-02-12 00:08:59',
               ...
               '2015-02-13 23:51:00', '2015-02-13 23:51:59',
               '2015-02-13 23:53:00', '2015-02-13 23:54:00',
               '2015-02-13 23:55:00', '2015-02-13 23:55:59',
               '2015-02-13 23:57:00', '2015-02-13 23:57:59',
               '2015-02-13 23:58:59', '2015-02-14 00:00:00'],
              dtype='datetime64[ns]', name='date', length=2881, freq=None)

In [7]: df.truncate(before='2015-02-12 01:00:00', after='2015-02-13 23:00:00').index
Out[7]:
DatetimeIndex(['2015-02-12 01:00:00', '2015-02-12 01:01:00',
               '2015-02-12 01:01:59', '2015-02-12 01:02:59',
               '2015-02-12 01:04:00', '2015-02-12 01:05:00',
               '2015-02-12 01:06:00', '2015-02-12 01:07:00',
               '2015-02-12 01:08:00', '2015-02-12 01:08:59',
               ...
               '2015-02-13 22:51:00', '2015-02-13 22:52:00',
               '2015-02-13 22:53:00', '2015-02-13 22:53:59',
               '2015-02-13 22:54:59', '2015-02-13 22:56:00',
               '2015-02-13 22:57:00', '2015-02-13 22:58:00',
               '2015-02-13 22:59:00', '2015-02-13 22:59:59'],
              dtype='datetime64[ns]', name='date', length=2761, freq=None)

因此,我认为您只需要修改函数来验证是否传递了有效日期(和时间)。

 类似资料:
  • 问题内容: 谁能通过示例JSP代码帮助我,以通过JDBC在MySql数据库中存储日期?当我尝试执行下面给出的代码时,出现以下异常: com.mysql.jdbc.MysqlDataTruncation:数据截断:不正确的datetime值:第1行的’date’列的’‘ 如何克服这个问题?以下是我的代码: 问题答案: 要将日期设置为准备好的语句,您需要更改值的类型: 现在将String date转换

  • 问题内容: 我正在努力计算午夜后的时间: 问题答案: 如果您不关心夏令时的变化,并且假设世界是理想的(不是理想的),则可以从24小时中减去结束与开始之间的持续时间(以开始与结束为间隔):

  • 问题内容: 如何用Java返回比当前系统时间少4小时的Date对象? 问题答案: 最简单的方法之一: 但是,这没有考虑DST(夏令时)。另一种选择是Calendar: 但是,这是一个非常丑陋的API。另一种选择是JodaTime:

  • 问题内容: 我想使用JSON从Python发送序列化形式的datetime.datetime对象,并使用JSON在JavaScript中反序列化。做这个的最好方式是什么? 问题答案: 你可以在中添加参数来处理此问题: 这是格式。 更全面的默认处理程序功能:

  • 我想为每个特定的功能文件指定特定的设置和拆卸步骤。我已经看到了允许代码在每个场景之前执行的钩子,以及在每个功能之前执行代码的钩子。但是我想指定代码在所有场景为一个特定功能运行之前和之后运行一次。 这有可能吗?

  • 问题内容: 所以我有一个大熊猫DataFrame,其中包含大约两个月的信息,每秒有一行信息。太多信息无法同时处理,因此我想抓住特定的时间范围。以下代码将在2012年2月5日之前抓取所有内容: 我想做与此等效: 但这是不允许的。现在,我可以使用以下两行来完成此操作: 但是我必须使用20个不同的DataFrame和许多次来执行此操作,并且能够轻松地执行此操作会很好。我知道pandas可以做到这一点,因