筛选一列中的行,该列是Panda中的字母、数字或连字符



给定如下数据帧,我需要检查room列:

id    room
0   1   A-102
1   2     201
2   3    B309
3   4   C·102
4   5  E_1089

该列的正确格式应为numbersalphabethyphen,否则,用incorrect填充check

预期结果如下:

id    room      check
0   1   A-102        NaN
1   2     201        NaN
2   3    B309        NaN
3   4   C·102  incorrect
4   5  E_1089  incorrect

这里的非正式语法可以是:

df.loc[<filter1> | (<filter2>) | (<filter3>), 'check'] = 'incorrect'

感谢您提前提供的帮助。

使用str.match强制所有字符:

df['check'] = np.where(df.room.str.match('^[a-zA-Zd-]*$'), np.NaN, 'incorrect')

或具有否定模式的str.contains

df['check'] = np.where(df.room.str.contains('([^a-zA-Zd-])'), 'incorrect', np.NaN)

输出:

id    room      check
0   1   A-102        nan
1   2     201        nan
2   3    B309        nan
3   4   C·102  incorrect
4   5  E_1089  incorrect

如果要更新现有的check列,请使用loc访问权限。例如:

df.loc[df.room.str.contains('([^a-zA-Zd-])'), 'check'] = 'incorrect'
# or safer when `NaN` presents
# df.loc[df.room.str.contains('([^a-zA-Zd-])') == True, 'check'] = 'incorrect'

最新更新