首页 > 解决方案 > Python系列if条件返回ValueError:

问题描述

我的代码返回ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我想比较两个日期,如果是最新日期,做点什么

dlast= datetime.strptime(df.index[-1], '%Y-%m-%d')
dnow = pd.to_datetime(date_mode, format='%Y, %m, %d').dt.date

if dlast<dnow:
     print "yes yes"

if 语句 where 发生错误dlastdnow无法比较

    >>> type(dlast)
<type 'datetime.datetime'>
>>> dlast
datetime.datetime(2020, 2, 26, 0, 0)
>>> dnow
0    2020-02-28
Name: trading_day, dtype: object
>>> type(dnow)
<class 'pandas.core.series.Series'>
>>> df.index[-1]
'2020-02-26'
>>> type(df.index[-1])
<type 'str'>
>>> date_mode
0   2020-02-28
Name: trading_day, dtype: datetime64[ns]
>>> type(date_mode)
<class 'pandas.core.series.Series'>

标签: pythonpandas

解决方案


一种解决方案可能是重载“>”。查看此链接https://www.geeksforgeeks.org/operator-overloading-in-python/关于 python 中的运算符重载

编辑:由于我不清楚,这是克服此问题的有效解决方案。我知道这不是最漂亮的,但它是一种在处理类型不匹配时通常可以应用于大多数语言的解决方案:

import pandas as pd
import numpy as np
from datetime import datetime

date_mode = pd.Series("2020, 02, 28", index=[0])
dlast= datetime.strptime("2020-02-26", '%Y-%m-%d')
dnow = pd.to_datetime(date_mode, format='%Y, %m, %d').dt.date

class A: 
    def __init__(self, a): 
        self.a = a 
    def __lt__(self, other): 
        if(self.a.year < other.a[0].year): 
            return True
        elif(self.a.year == other.a[0].year):
            if(self.a.month < other.a[0].month): 
                return True
            elif(self.a.month == other.a[0].month):
                if(self.a.day < other.a[0].day):
                    return True
                else:
                    return False
            else:
                return False
        else:
            return False

obj1 = A(dlast)
obj2 = A(dnow)
if(obj1 < obj2):
    print("yes yes")

推荐阅读