代码之家  ›  专栏  ›  技术社区  ›  Madhur Yadav

未包含在轴误差中的标签-熊猫数据文件

  •  1
  • Madhur Yadav  · 技术社区  · 8 年前

    我有一个名为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'类型的。

    我只想保留那些代码为- CBCNTRY公司 或 红细胞 或 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 回复  |  直到 8 年前
        1
  •  1
  •   chuni0r    8 年前

    根据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
    
        2
  •  1
  •   Yuca    8 年前

    当您使用系列时,可以使用 pd.isin 是的。例如,可以通过执行以下操作来实现您的目标:

    df = df[df['code'].isin(['DRWRCNTRY', 'RBCNTRY', 'CBCNTRY'])]
    
        3
  •  1
  •   user96564    8 年前

    你可以用 np.where 和 isin

    假设您有一个名为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