Python使用pandas处理CSV两列分隔数据求交集返回空列表原因排查
问题原因
- 核心逻辑错误:遍历行时选取了整列数据而非当前行的单元格值。代码中
data.iloc[:, 2]的冒号代表选择所有行的第三列(索引从0开始计数),你是把整列的内容整体转成字符串再分割,完全不是目标行的单元格内容,自然无法得到正确交集。 - 潜在匹配问题:未处理单词可能存在的首尾空格,若原始单元格内存在
dog | cat这类带空格的格式,直接分割后会出现带空格的单词,导致匹配失败。
修正后代码
import pandas as pd data = pd.read_csv('data.csv') intersect1 = [] for j in range(len(data)): # 取当前j行的第3、4列单元格值,分割后去除每个元素的首尾空格 x = [word.strip() for word in str(data.iloc[j, 2]).split("|")] y = [word.strip() for word in str(data.iloc[j, 3]).split("|")] # 求交集后用|拼接成要求的格式 intersect = "|".join(list(set(x) & set(y))) intersect1.append(intersect) print(intersect1)
如果需要保留列表嵌套的格式,不需要拼接成字符串,把"|".join()去掉即可。
可选优化写法(不用循环,pandas向量化处理效率更高)
def get_intersect(row): x = [w.strip() for w in str(row[2]).split("|")] y = [w.strip() for w in str(row[3]).split("|")] return "|".join(set(x) & set(y)) data['intersect'] = data.apply(get_intersect, axis=1) print(data['intersect'].tolist())
内容的提问来源于stack exchange,提问作者d12
相关产品推荐
相关产品推荐

