我有一个带有日期的dataframe列(已经转换成日期时间格式)。现在,我需要将列中的年份与数字进行比较,例如:
Date
01-02-2018
04-07-2016
09-09-2019
我想做一个比较:
if dfA['Date'].dt.year == current:
## do something
有两个问题:
代码给出了这个错误
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
该数字来自分配给名称current的用户输入(我使用以下代码将current转换为int ):
current = int(args.User_Input)
不知道为什么这会给我一个错误
发布于 2019-08-09 07:59:40
我假设您希望您的if -子句计算为True
,如果在dfA['Date']
中的任何年份等于current
?如果是这样的话,您可以这样做:
if dfA['Date'].dt.year.eq(current).sum():
# do something
发布于 2019-08-09 08:10:09
# Creating the data you specified
times = ['01-02-2018',
'04-07-2016',
'09-09-2019']
#converting to a dataframe
dfA = pd.DataFrame(times)
#Renaming the dataframe to the correct name
dfA.rename(columns={0:'Date'},inplace=True)
#formatting
dfA['Date'] = pd.to_datetime(dfA['Date'], format='%m-%d-%Y')
#User input. Must be an int
currentYear = int(input('Enter Year:'))
#Need to specify the index number using .values[n] to specify which year you're testing against
if dfA['Date'].dt.year.values[0] == currentYear:
print('Do Something')
发布于 2019-08-09 08:13:55
出现此错误是因为语句dfA['Date'].dt.year == current
是布尔值的pandas.Series,而不是一个布尔值:
dfA['Date'].dt.year == 2018
# 0 True
# 1 False
# 2 False
# Name: Date, dtype: bool
python if
语句不知道如何处理:是否应该运行if
语句下的代码块,因为本系列中的任何值都是真的?还是不应该因为不是所有的值都是真而运行呢?还是应该运行它,因为Series本身不是一个假值,比如None
或零?意图是模棱两可的,因此出现错误。
如果要对符合指定标准的所有列在DataFrame上执行某些操作,请考虑使用布尔索引。您制作的系列可以用于选择DataFrame的某些行,如下所示:
dfA['example'] = 100
is_matching_year = dfA['Date'].dt.year == 2018
dfA.loc[is_matching_year, 'example'] *= 2
print(dfA[['Date', 'example']])
# Date example
# 0 2018-01-02 200
# 1 2016-04-07 100
# 2 2019-09-09 100
https://stackoverflow.com/questions/57433515
复制