axis error pandas datafram中未包含标签

2024-05-23 19:15:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为df的数据帧,看起来像-

pageno     entity          code         rawentity 
17727425   SAUDI           CBCNTRY      saudi 
17727425   GARRA           DRWRNAME     garra
17727425   PO BOX          RBCNTRY      po box 
17727425   NEW ZEALAND     DRWRCNTRY    new zealand

我还有一份国家名单,上面有国家。它属于“list”类型。在

我试图只保留那些代码为-CBCNTRYRBCNTRYDRWRCNTRY的值,并且实体应该在国家列表中。在

我写的代码是-

^{pr2}$

但我得到了以下错误-

Error is: labels [<built-in method index of Pandas object at 0x0000020A1BCE4EB8>] not contained in axis

我只想知道为什么我的方法是错误的,除了这个方法我还有什么更好的办法可以做。在

我查过这个错误,但找不到满意的答案。在


Tags: 数据方法代码indf错误code国家
3条回答

您可以使用np.whereisin

假设您有一个名为countrylist的列表,其中包含沙特语

countrylist = ['SAUDI']
df['code'] = np.where((df['code'] == 'CBCNTRY')| (df['code'] == 'RBCNTRY') | (df['code'] == 'DRWRCNTRY'),
                      df['code'], np.nan
                      )

df['code'] = np.where(df['entity'].isin(countrylist), df['code'], np.nan)

df.dropna(how='any', inplace= True)

print(df)

  pageno entity     code rawentity
17727425  SAUDI  CBCNTRY     saudi

使用系列时,可以使用pd.isin。例如,您可以通过以下方式实现:

df = df[df['code'].isin(['DRWRCNTRY', 'RBCNTRY', 'CBCNTRY'])]

按照Gerardo的建议,使用pd.isin并使用布尔运算符组合表达式:

countrylist = ['SAUDI']
codelist = ['DRWRCNTRY', 'RBCNTRY', 'CBCNTRY']
df = df[(df['code'].isin(codelist)) & (df['entity'].isin(countrylist))]

结果

^{pr2}$

相关问题 更多 >