【问题标题】:Python ValueError: Both dates must have the same UTC offset with .locPython ValueError:两个日期必须与 .loc 具有相同的 UTC 偏移量
【发布时间】:2020-05-21 05:33:43
【问题描述】:

我在使用 loc 获取 pandas DataFrame 中两个时段之间的所有条目时遇到问题。例如,下面的两行都给了我一个值:

periods.loc[start]

periods.loc[end]

但是,当我运行以下命令时,我得到一个 ValueError:“两个日期必须具有相同的 UTC 偏移量”:

periods.loc[start:end]

我希望得到一个包含这两个日期之间的所有条目的 DataFrame。所有条目都是“yyyy-mm-dd”形式的字符串。 以下是句号的前 10 个条目:

0    2007-01-25 09:10:02
1    2007-01-26 07:03:01
2    2007-02-02 04:50:51
3    2007-02-06 07:54:35
4    2007-02-07 06:31:05
5    2007-02-07 09:09:47
6    2007-02-07 09:43:12
7    2007-02-09 07:34:55
8    2007-02-13 04:32:04
9    2007-02-15 06:30:51

【问题讨论】:

  • 您能否提供periods 中的值示例??
  • 当然。引发错误的示例是 start='2007-02-21 06:43:09' 和 end='2007-03-19 08:53:51'
  • periods 的值是多少?您能否打印前 10 个数据点并将其发布到您的代码中?
  • 当然。刚刚对OP进行了编辑。谢谢!

标签: python pandas valueerror


【解决方案1】:

您需要将数据转换为datetime.datetime 对象。这是一个完整的示例,说明如何做到这一点:

>>> import pandas as pd
>>> from datetime import datetime


>>> df = pd.DataFrame({"date": ["2007-01-25 09:10:02", "2007-01-26 07:03:01",
...                             "2007-02-02 04:50:51", "2007-02-06 07:54:35",
...                             "2007-02-07 06:31:05", "2007-02-07 09:09:47",
...                             "2007-02-07 09:43:12", "2007-02-09 07:34:55",
    ...                         "2007-02-13 04:32:04", "2007-02-15 06:30:51"]})
>>> # convert the date column to datetime object
>>> df["date"] = pd.to_datetime(df["date"], format="%Y-%m-%d %H:%M:%S")
>>> df
                 date
0 2007-01-25 09:10:02
1 2007-01-26 07:03:01
2 2007-02-02 04:50:51
3 2007-02-06 07:54:35
4 2007-02-07 06:31:05
5 2007-02-07 09:09:47
6 2007-02-07 09:43:12
7 2007-02-09 07:34:55
8 2007-02-13 04:32:04
9 2007-02-15 06:30:51

现在,让我们使用startend 这两个日期来分割它:

>>> start = "2007-01-25 09:10:02"
>>> end = "2007-02-07 08:53:51"

>>> # convert start and end from string to datetime object
>>> start = datetime.strptime(start, '%Y-%m-%d %H:%M:%S')
>>> end = datetime.strptime(end, '%Y-%m-%d %H:%M:%S')

>>> # let's access some values
>>> df.loc[(df["date"] >= start) & (df["date"] < end)] #mimics the slice object
                 date
0 2007-01-25 09:10:02
1 2007-01-26 07:03:01
2 2007-02-02 04:50:51
3 2007-02-06 07:54:35
4 2007-02-07 06:31:05

此外,您可以使用loc 访问任何特定日期:

>>> new_date = "2007-02-07 06:31:05"
>>> new_date = datetime.strptime(new_date, '%Y-%m-%d %H:%M:%S')
>>> df.loc[df["date"] == new_date]
                 date
4 2007-02-07 06:31:05

【讨论】:

  • 工作。谢谢!
  • 很高兴我能帮上忙 :)
猜你喜欢
  • 2016-05-04
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
  • 2020-07-25
相关资源
最近更新 更多