提取DataFrame唯一值时出现未知值'19049'的问题求助
解决DataFrame提取唯一值出现“幽灵”字符串的问题
这问题我之前踩过坑!大概率是不可见的特殊字符在搞鬼——比如UTF-8 BOM(字节顺序标记)或者其他空白字符,导致那个看起来是'19049'的字符串,实际前面/后面藏了肉眼看不到的额外字符,所以你在原始文件和DataFrame里直接看发现不了,但提取唯一值时它就冒出来了。
第一步:验证你的猜测
先写几行代码确认这个“幽灵”字符串的真实面目:
# 筛选出异常的那个值 odd_stock_id = [x for x in uniqueStockIdVec if x not in ['19049', '24937', '139677']][0] # 查看字符串长度(正常'19049'长度是5,如果这个更长就说明有额外字符) print(f"异常值长度:{len(odd_stock_id)}") # 用repr()显示原始字符串,能看到不可见字符 print(f"原始字符串:{repr(odd_stock_id)}")
如果输出里看到类似'\ufeff19049',那就是UTF-8 BOM在作祟——很多文本编辑器保存UTF-8文件时会自动加上这个标记,它肉眼不可见,但会被pandas当成字符串的一部分。
第二步:解决方法
方法1:读取文件时直接处理BOM
修改pd.read_csv的编码参数为'utf-8-sig',这个编码会自动去掉UTF-8 BOM:
tmpPandaObj = pd.read_csv(fn, sep='\t', header=None, encoding='utf-8-sig') tmpPandaObj.columns = ['stockId','dt','hhmm','seq','ecalls']
方法2:清洗已读取的DataFrame列
如果已经读取了数据,也可以直接清洗stockId列,去掉不可见字符:
# 去掉字符串前后所有空白/不可见字符 tmpPandaObj['stockId'] = tmpPandaObj['stockId'].str.strip() # 或者精准替换BOM字符(如果确认是BOM的话) tmpPandaObj['stockId'] = tmpPandaObj['stockId'].str.replace('\ufeff', '')
之后再提取唯一值,应该就能得到你预期的结果了。
内容的提问来源于stack exchange,提问作者Kyle Dixon
相关产品推荐
相关产品推荐

