[英]Panda dataFrame check if value exists
我有一个 dataframe,看起来像这样。
Date | Hour
--------------------------
11/06/2020 | 13
17/06/2020 | 12
02/07/2020 | 9
我想检查小时是否也低于 10 的日期是否存在。下面是我的代码,但它是错误的。
if((dataFrame['Hour'] < 10).any() & (dataFrame['Date'] == date).any()):
point = 1
请需要你们的帮助。 提前致谢!
我将按如下方式使用isinstance
:
df = pd.DataFrame({'Date':[datetime.datetime(2020, 6, 11), datetime.datetime(2020, 6, 17), datetime.datetime(2020, 7, 2), datetime.datetime(2020, 7, 12), 0],
'Hour':[13, 12, 9, 5, 3]})
df.loc[df.Hour < 10, 'Date'].apply(lambda x: isinstance(x, datetime.datetime))
df:
日期 | 小时 | |
---|---|---|
0 | 2020-06-11 00:00:00 | 13 |
1个 | 2020-06-17 00:00:00 | 12 |
2个 | 2020-07-02 00:00:00 | 9 |
3个 | 2020-07-12 00:00:00 | 5个 |
4个 | 0 | 3个 |
结果:
2 True
3 True
4 False
Name: Date, dtype: bool
问题:
如果“日期”列中唯一的非日期时间值是None
类型,如None
和np.nan
的情况,则 pandas 将假定整个列都是datetime
时间类型,并且此方法将无法按预期工作。 要解决此问题,请将None
值替换为0
。
解决方案:
df.loc[df.Hour < 10, 'Date'].replace(np.nan, 0).apply(lambda x: isinstance(x, datetime.datetime))
您可以使用 & 和 | 过滤具有多个条件的数据框运算符,或使用query()方法,然后检查结果数据帧的长度以获取匹配行数。
方法一:使用 & 运算符
import pandas as pd
dataFrame = pd.DataFrame({
'Date': ['11/06/2020', '17/06/2020', '02/07/2020'],
'Hour': [13, 12, 9]
})
date = '02/07/2020' # target date to match
if len(dataFrame[(dataFrame['Hour'] < 10) & (dataFrame['Date'] == date)]) != 0:
# at least one row in dataframe matches both conditions
point = 1
else:
point = 0
方法 2:使用 query() 方法。
results = dataFrame.query(f"Hour < 10 and Date == '{date}'")
if len(results) != 0:
print("match")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.