比较字符串和 strftime 值时,运算符中的 Python 未按预期工作

我正在使用日期时间值转换为数据帧中的字符串(年)。我想使用in运算符检查我的 dataframe.year_as_string 列中是否存在给定的年份。但是,我的表达式意外地得出False(请参阅第二个打印语句)。为什么会发生这种情况?


注意:我可能可以用更简单的方式解决我的问题(如在第三个打印语句中),但我真的很好奇为什么第二个语句的计算结果为 False。


import pandas as pd


ind = 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 list

print('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 expect

year = ind.strftime('%Y')

print('2013' in year)


撒科打诨
浏览 203回答 3
3回答

繁星coding

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()

慕神8447489

in在 apandas.Series检查索引中是否有内容,就像 a 一样dict。文件资料
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python