标签未包含在轴错误中-Pandas DataFrame

时间:2018-07-09 14:47:48

标签: python python-3.x pandas dataframe

我有一个名为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

我还有一个包含国家/地区名称的国家/地区列表。类型为“列表”。

我正在尝试仅保留代码为- CBCNTRY RBCNTRY DRWRCNTRY 的值,并且该实体应位于国家/地区列表

我写的代码是-

        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 个答案:

答案 0 :(得分:1)

处理系列时,可以使用pd.isin。例如,您可以通过以下操作来实现:

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

答案 1 :(得分:1)

您可以使用np.whereisin

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

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

答案 2 :(得分:1)

根据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