我在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