Pandas筛选数据时遇'Series'无isnumeric属性错误的解决方法
解决Pandas筛选时的AttributeError及逻辑问题
嘿,我来帮你搞定这个问题!首先看你遇到的AttributeError: 'Series' object has no attribute 'isnumeric',这个坑很多人都踩过——Pandas的Series对象本身没有isnumeric()方法,这个方法是字符串对象独有的,所以你必须用Pandas的字符串访问器.str来调用它,也就是写成similarity_matrix['Root_Word'].str.isnumeric()才行。
另外,我看你的代码里还有两个容易忽略的问题:
1. 空相似词的判断错误
你生成的Similar_Words列是空列表[]而不是NaN,所以用isnull()根本检测不到空值!得换成判断列表长度是否为0,比如用apply(len) == 0或者lambda函数来判断。
2. 条件逻辑搞反了
你的需求是同时满足三个筛选规则:Root Word长度为1、相似词为空、移除纯数字的Root Word行,但你用了np.logical_or.reduce(conditions)(逻辑或),这会保留满足任意一个条件的行,完全不符合你的需求,应该用逻辑与&来组合条件。
修正后的完整代码
import pandas as pd import numpy as np # 假设你的words和word2vec模型已经准备好,这部分代码不变 similar = [[item[0] for item in model.wv.most_similar(word) if item[1] > 0.7] for word in words] similarity_matrix = pd.DataFrame({'Root_Word': words, 'Similar_Words': similar}) similarity_matrix = similarity_matrix[['Root_Word', 'Similar_Words']] # 定义三个筛选条件 # 条件1:Root_Word的字符串长度等于1 cond1 = similarity_matrix['Root_Word'].str.len() == 1 # 条件2:Similar_Words是空列表(没有匹配的相似词) cond2 = similarity_matrix['Similar_Words'].apply(lambda x: len(x) == 0) # 条件3:排除Root_Word仅包含数字的行(~表示取反,保留非纯数字的行) cond3 = ~similarity_matrix['Root_Word'].str.isnumeric() # 同时满足三个条件的筛选结果 filtered_df = similarity_matrix[cond1 & cond2 & cond3]
验证一下你的示例数据
拿你给的示例DataFrame来说:
- 行
g |:满足长度1、相似词为空、非纯数字,会被保留 - 行
1 |:虽然满足前两个条件,但属于纯数字,会被排除 - 其他像
kwun、bay这类不满足长度1的行,也会被过滤掉
这样就完全符合你提出的三个筛选要求啦!
内容的提问来源于stack exchange,提问作者Rahul rajan
相关产品推荐
相关产品推荐

