拉丁的传说
你可以pd.Series.str.isnumeric在这里使用。df['Result'] = np.where(df['ID'].str.isnumeric(), 'YES', 'NO') ID Result0 3965 YES1 wyq8 NO2 RO_123 NO3 CMD_ NO4 2976 YESisnumeric使用它不能识别数字有一个警告float。test = pd.Series(["9.0", "9"])test.str.isnumeric()0 False1 Truedtype: bool如果您严格标记YESfor intthen 使用isnumericelse,您可以pd.Series.str.fullmatch在此处使用(从版本 1.1.0 开始)。df['Result'] = np.where(df['ID'].str.fullmatch(r"\d+|\d+\.\d+", 'YES', 'NO')对于版本<1.1.0,您使用re.fullmatchdf['Result'] = np.where(df['ID'].str.isnumeric(), 'YES', 'NO') ID Result0 3965 YES1 wyq8 NO2 RO_123 NO3 CMD_ NO4 2976 YESisnumeric使用它不能识别数字有一个警告float。test = pd.Series(["9.0", "9"])test.str.isnumeric()0 False1 Truedtype: bool或者我们可以使用pd.to_numeric布尔掩码pd.Series.isnam = pd.to_numeric(df['ID'], errors='coerce').isna()
df['Result'] = np.where(m, 'NO', 'YES')如果errors参数设置为'coerce'无法转换为数字的值,则值将设置为Nan。test = pd.Series(['3965', 'wyq8', 'RO_123', 'CMD_', '2976'])pd.to_numeric(test)0 3965.01 NaN2 NaN3 NaN4 2976.0Name: ID, dtype: float64或者您可以构建自定义函数def numeric(val): try: float(val) # Using just `float` would suffice as int can be return 'YES' # converted to `float` so both `int` # and `float` wouldnot raise any error except ValueError: return 'NO'df['Result'] = df['ID'].apply(numeric)注意:float也处理科学记数法,float("1e6")-> 1000000.0。test = pd.Series(['1e6', '1', 'a 10', '1E6'])test.apply(numeric)0 YES1 YES2 NO3 YESdtype: object