对比DataFrame列值与字典值筛选行时出现KeyError如何解决
错误原因及解决方案
报错直接原因
你写的df.loc['Responsible Market']用法不符合pandas规范:loc接收的第一个参数默认是行索引匹配条件,你传入列名'Responsible Market'时,pandas会尝试在行索引中查找该值,找不到就会抛出KeyError。如果要获取该列的整列值,正确写法是df['Responsible Market']或者df.loc[:, 'Responsible Market']。
隐藏的逻辑错误
就算你修正了取列的写法,原有逻辑也无法运行:launch_dates.get()仅支持传入单个国家名称作为入参,你传入一整列Series对象,无法批量返回每个国家对应的发布日期。
正确实现代码
你可以用map()方法批量映射国家对应的发布日期,再做日期比较即可,示例如下:
import pandas as pd # 先将日期列统一转成datetime格式,避免字符串比较出现逻辑错误 df['Date created'] = pd.to_datetime(df['Date created']) # 映射得到每行对应市场的发布日期,直接筛选符合条件的行 df = df[df['Date created'] >= df['Responsible Market'].map(launch_dates)]
如果你的实际日期列名是Case created on - Date,替换上述代码中的列名即可。
内容的提问来源于stack exchange,提问作者Christian Kammerer
相关产品推荐
相关产品推荐

