如何在Pandas中判断字符串列末尾5位是否为数字?解决isnumeric报错
解决DataFrame中使用
isnumeric()的AttributeError问题 嘿,我来帮你搞定这个问题!你遇到的AttributeError: 'Series' object has no attribute 'isnumeric'是因为**isnumeric()是单个字符串的方法,不能直接在pandas的Series对象上调用**,必须通过str访问器来逐个对Series中的字符串应用这个方法。
问题原因
当你直接写df['Code'].isnumeric()时,pandas会认为你在调用Series的方法,但Series本身并没有isnumeric()这个属性。要对Series中的每个字符串执行字符串操作,必须先用.str访问器,它会把Series中的每个元素当成字符串来处理。
解决方案代码
根据你描述的需求(若Code列字符串的最后5个字符是数字,则将对应Mark列设为'A'),可以这样写:
import pandas as pd # 构建你的原始DataFrame df = pd.DataFrame({ 'Code': ['Abd', 'Charles de Gaulle', 'Carlitos', 'Antonio'], 'Mark': ['43212312312', '', '4132411', ''] }) # 1. 提取Code列每个字符串的最后5个字符 # 2. 用str.isnumeric()判断是否为数字,得到布尔掩码 mask = df['Code'].str[-5:].str.isnumeric() # 将符合条件的Mark列设置为'A' df.loc[mask, 'Mark'] = 'A' print(df)
代码解释
df['Code'].str[-5:]:通过str访问器对每个字符串取最后5个字符,如果字符串长度小于5(比如'Abd'),则返回整个字符串。.str.isnumeric():对提取后的每个字符串判断是否全为数字,返回一个布尔值的Series(符合条件为True,否则为False)。df.loc[mask, 'Mark'] = 'A':使用布尔掩码定位符合条件的行,将这些行的Mark列值替换为'A'。
额外提示
看你给出的期望结果,行0的Code是'Abd'(最后5个字符不是数字)但Mark被设为了'A',这和你描述的需求不太匹配。如果你的实际需求是当Mark列的值为数字时将其设为'A',那代码可以调整为:
mask = df['Mark'].str.isnumeric() df.loc[mask, 'Mark'] = 'A'
这样运行后就能得到你想要的期望结果啦~
内容的提问来源于stack exchange,提问作者aabujamra
相关产品推荐
相关产品推荐

