代码之家  ›  专栏  ›  技术社区  ›  buydadip

如果列值不包含任何给定值,请更改列值

  •  1
  • buydadip  · 技术社区  · 8 年前

    我有一个CSV文件,我正在使用熊猫来操作它。例如,我正在检查一列是否包含数组中的任何值,如果包含,我会更改值。。。

    searchfor = ['LANGUAGES', 'FRENCH']
    data.loc[data['field'].str.contains('|'.join(searchfor), na=False), 'field'] = 16
    

    如果我想做相反的事情呢?如果数组中不包含任何值,请将其更改。因此,如果列值不是 Languages 也没有 FRENCH ,将其更改为 int . 我需要一个可扩展的答案,因为我使用的阵列可能非常大。

    谢谢

    2 回复  |  直到 8 年前
        1
  •  3
  •   Vaishali    8 年前

    您可以将“~”运算符用于Not in。

    data = pd.DataFrame({'field': ['LANGUAGES', 'FRENCH', 'BLAH', None, np.nan, 'Languages']})
    
    searchfor = ['LANGUAGES', 'FRENCH']
    
    data = data.loc[~data['field'].str.contains('|'.join(searchfor), na=False), 'field'] = 16
    

    你得到

        field
    0   LANGUAGES
    1   FRENCH
    2   16
    3   16
    4   16
    5   16
    

    请注意,这段代码不处理大小写,为此,请首先使用str.upper()

    data = data.loc[~data['field'].str.upper().str.contains('|'.join(searchfor), na=False), 'field'] = 16
    
        field
    0   LANGUAGES
    1   FRENCH
    2   16
    3   16
    4   16
    5   Languages
    
        2
  •  1
  •   Peter Leimbigler    8 年前

    用波浪号(~)对布尔索引器求反:

    data.loc[~data['field'].str.contains('|'.join(searchfor), na=False), 'field'] = 16