Python ValueError: 两个日期必须有相同的UTC偏移量,并使用.loc。

问题描述 投票:1回答:1

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

periods.loc[start]

periods.loc[end]

然而,当我运行下面的代码时,我得到一个ValueError: "两个日期必须有相同的UTC偏移"。

periods.loc[start:end]

我希望得到一个DataFrame,其中包含这两个日期之间的所有条目。所有的条目都是一个 "yyy-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
python pandas valueerror
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.