我正在使用日期时间值转换为数据帧中的字符串(年)。我想使用in运算符检查我的 dataframe.year_as_string 列中是否存在给定的年份。但是,我的表达式意外地得出False(请参阅第二个打印语句)。为什么会发生这种情况?注意:我可能可以用更简单的方式解决我的问题(如在第三个打印语句中),但我真的很好奇为什么第二个语句的计算结果为 False。import pandas as pdind = pd.to_datetime(['2013-12-31', '2014-12-31'])df = pd.DataFrame([1, 2], index=ind)df = df.reset_index()df.columns = ['year', 'value']df['year_as_string'] = df.year.dt.strftime('%Y')# 1. the string '2013' is equal to the first element of the listprint('2013' == df['year_as_string'][0])# 2. but that same string is not 'in' the list?! Why does this evaluate to False?print('2013' in df['year_as_string'])# 3. I further saw that strftiming the DatetimeIndex itself does evaluate as I would expectyear = ind.strftime('%Y')print('2013' in year)
3 回答
繁星coding
TA贡献1797条经验 获得超4个赞
in
使用 Pandas 系列的运算符将检查索引,就像使用in
字典只会检查键一样。相反,您可以将其in
与系列的NumPy数组表示形式一起使用:
'2013' in df['year_as_string'].values
一种更可恶的方法是构造一个布尔序列,然后使用pd.Series.any
:
(df['year_as_string'] == '2013').any()
等效地:
df['year_as_string'].eq('2013').any()
更好的是,除非绝对必要,否则避免转换为字符串:
df['year_as_int'] = df['year'].dt.year df['year_as_int'].eq(2013).any()
添加回答
举报
0/150
提交
取消