uniqu中不断包含未知值

2024-10-01 07:11:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个数据帧中拉出一个唯一值的列表,但是我一直得到一个在原始数据帧中找不到的值。以前有人碰到过这样的事吗

我在一个文本文件中读到:

tmpPandaObj = pd.read_csv(fn, sep='\t', header=None)   
tmpPandaObj.columns = ['stockId','dt','hhmm','seq','ecalls']

拉出唯一值:

uniqueStockIdVec = tmpPandaObj.stockId.unique()

但是我一直在唯一向量中包含“\ufeff19049”。我已经尽可能地搜索了文本文件和数据框,但没有找到任何'\ufeff19049'值。唯一的值应该是“19049”、“24937”、“139677”


Tags: columnscsv数据none列表read原始数据sep
2条回答

你做的很好,但看起来像参考u'\ufeff' in Python string。这个\ufeff就像熊猫省略的幽灵角色,所以你找不到这个值

如果有问题,可以尝试使用.encode(...)函数清除列中的所有数据,或者尝试将每一行强制转换为int或任何需要的内容

首先,修复方法:在读取文件时指定encoding='UTF-8-sig'

现在,解释是:

\ufeff是UnicodeBOM (Byte Order Mark) character。每当一个工具用BOM写入文件,而另一个工具使用显式编码(如UTF-16-LE)而不是BOM切换版本(如UTF-16)读取文件时,BOM将被视为普通字符,因此\ufeff将显示在字符串中。在microsoftland之外,这个特定的问题(将UTF-16理解为UTF-16-LE)是这个问题最常见的版本

但是,如果其中一个工具来自Microsoft,则更常见的是UTF-8。Unicode标准建议永远不要将BOM与UTF-8一起使用(因为字节不需要字节顺序标记),但并不完全禁止,因此许多Microsoft工具一直在这样做。然后其他所有工具,包括Python(和Pandas)只将其读取为UTF-8,没有BOM,导致额外的\ufeff出现(旧的、非Unicode友好的工具将读取与\xef\xbb\xbf类似的三个字节,您可能已经见过几次了。)

但是,虽然Python(和Pandas)默认为UTF-8,但它确实允许您手动指定编码,并且它附带的一种编码称为UTF-8-sig,这意味着UTF-8一开始就有一个无用的BOM

相关问题 更多 >