我有一个名为df的数据框,看起来像-pageno entity code rawentity 17727425 SAUDI CBCNTRY saudi 17727425 GARRA DRWRNAME garra17727425 PO BOX RBCNTRY po box 17727425 NEW ZEALAND DRWRCNTRY new zealand我还有一个包含国家名称的国家列表,它是'list'类型的。我试图仅保留那些代码为-CBCNTRY或RBCNTRY或DRWRCNTRY的值,并且该实体应位于countrylist中。我写的代码是- for row in df.itertuples(): if(row.code in ['DRWRCNTRY', 'RBCNTRY', 'CBCNTRY']): if(row.entity not in countrylist): df.drop((row.index), inplace=True)但我收到以下错误-Error is: labels [<built-in method index of Pandas object at 0x0000020A1BCE4EB8>] not contained in axis我只想知道为什么我的方法是错误的,除了这种方法之外,还有什么我可以做的更好的事情了。我已经搜索了此错误,但无法获得满意的答案。
3 回答
撒科打诨
TA贡献1934条经验 获得超2个赞
正如Gerardo所建议的,使用pd.isin布尔运算符来使用和组合表达式:
countrylist = ['SAUDI']
codelist = ['DRWRCNTRY', 'RBCNTRY', 'CBCNTRY']
df = df[(df['code'].isin(codelist)) & (df['entity'].isin(countrylist))]
结果是
pageno entity code rawentity
0 17727425 SAUDI CBCNTRY saudi
慕哥6287543
TA贡献1831条经验 获得超10个赞
在处理系列时,可以使用pd.isin
。例如,您可以通过执行以下操作来实现:
df = df[df['code'].isin(['DRWRCNTRY', 'RBCNTRY', 'CBCNTRY'])]
添加回答
举报
0/150
提交
取消