.loc 不会专门用于'Date'列熊猫



我在panda中有一个数据帧,它最初有一个经过解析的日期列,其值为:2020-05-11 02:23:00

在此基础上,我使用df['Date'] = df.parsed_date_column.dt.date创建了一个"Date"列,产生值,例如数据类型为"object"的2020-05-11

从那时起,我只想保留某个日期的行,即df.loc[df['Date'] == '2021-06-26']或更简单的df[df['Date'] == '2021-06-26']
每当我执行此操作时,它都会返回一个空的数据帧,其中没有行,只有列名

我已经尝试将其转换为datetime64:pd.to_datetime(df['Date'], format='%Y-%m-%d')
将对象指定为字符串:combined_lanes[~combined_lanes['Date'].str.contains("2021-06-20")],<br]并单独定义日期:>

date = "2021-06-20"
df = df[df['Date'].str.lower() == date]

我没有尝试或研究过任何作品。

注意:当我尝试其他列,包括数据类型为"object"的列时,不会发生这种情况。

您的列中有一个datetime.date数据类型,因此必须与同一类型进行比较。

您可以使用Timestamp.date生成它:

df.loc[df['date'] == pd.Timestamp('2021-06-20').date()]

让我们取一个示例数据帧

import pandas as pd
import numpy as np
from datetime import datetime
rand = np.random.RandomState(0)
df = pd.DataFrame({
'date': pd.date_range('2022-01-01 13:13:05', freq='d', periods=10),
'var': rand.randn(10),
})
df.head()
date       var
0 2022-01-01 13:13:05  1.764052
1 2022-01-02 13:13:05  0.400157
2 2022-01-03 13:13:05  0.978738
3 2022-01-04 13:13:05  2.240893
4 2022-01-05 13:13:05  1.867558

要只保留年月日信息,您可以执行此

df['date'] = df['date'].dt.date
df.head()
date       var
0  2022-01-01  1.764052
1  2022-01-02  0.400157
2  2022-01-03  0.978738
3  2022-01-04  2.240893
4  2022-01-05  1.867558

当您在执行条件运算时遇到问题时,最好检查正在比较的元素的数据类型。它在人眼看来可能是一样的,但代码对它的解释可能不同。所以,

print(type(df.loc[0,'date']))
<class 'datetime.date'>

类似地,

flt_date = datetime.strptime('2022-01-08', "%Y-%m-%d").date()
print(type(flt_date))
<class 'datetime.date'>

既然数据类型匹配,就可以进行比较

df.loc[df['date']==flt_date]

返回

date       var
7  2022-01-08 -0.151357