我有CSV文件,我正在使用Pandas来操纵它。例如,我正在检查列是否包含数组中的任何值,如果是,我更改了值...
searchfor = ['LANGUAGES', 'FRENCH']
data.loc[data['field'].str.contains('|'.join(searchfor), na=False), 'field'] = 16
现在如果我想反过来怎么办?如果数组不包含数组中的任何值,请更改它。因此,如果列值不是Languages
,也不是FRENCH
,请将其更改为int
。我需要一个可扩展的答案,因为我使用的数组可能非常大。
由于
答案 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