python - 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 发生错误dlast
,dnow
无法比较
>>> 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'>
解决方案
一种解决方案可能是重载“>”。查看此链接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")
推荐阅读
- reactjs - 当我尝试测试故事书时,玩笑无法解析故事中的降价文件
- git - 如果从 git 存储库获取数据失败,则 Spring 配置服务器从本地机器读取属性
- angular - Angular 4 主包非常大(什么是 $_gendir?)
- jersey-2.0 - JERSEY:java.lang.IllegalStateException:输出流已经关闭
- sql - 如何更改历史表上的历史数据
- javascript - Angularjs如何在工厂中获取api
- dependencies - 为什么 Paket 尝试为 CliWrap 引入数百个依赖项?
- javascript - 如何使用 RTCPeerConnection.removeTrack() 删除视频或音频或两者?
- php - 删除没有指定名称的键
- r - 从字符串中提取数字并将其转换为数字