繁体   English   中英

熊猫 dataFrame 检查值是否存在

[英]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类型,如Nonenp.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM