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

时间:2017-11-06 22:02:15

标签: python-3.x pandas csv

我有CSV文件,我正在使用Pandas来操纵它。例如,我正在检查列是否包含数组中的任何值,如果是,我更改了值...

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

现在如果我想反过来怎么办?如果数组不包含数组中的任何值,请更改它。因此,如果列值不是Languages,也不是FRENCH,请将其更改为int。我需要一个可扩展的答案,因为我使用的数组可能非常大。

由于

2 个答案:

答案 0 :(得分:3)

您可以使用'〜'操作员不在。

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

答案 1 :(得分:1)

使用波浪号(〜)否定布尔索引器:

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