首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:熊猫数据帧:删除“BOM”BOM字符

Python:熊猫数据帧:删除“BOM”BOM字符
EN

Stack Overflow用户
提问于 2020-02-04 19:22:25
回答 2查看 4.8K关注 0票数 3

我在Linux机器上使用Scrapy爬行一些网站并保存在CSV中。当我检索数据集并在Windows机器上查看时,我看到了这些字符。下面是我如何将它们重新编码到UTF-8-SIG中:

代码语言:javascript
运行
复制
import pandas as pd

my_data = pd.read_csv("./dataset/my_data.csv")
output = "./dataset/my_data_converted.csv"
my_data.to_csv(output, encoding='utf-8-sig', index=False)

因此,如果在?上观看,现在它们就变成了VSCode。但是如果我在Notepad++上看,我就看不到这些了。我怎么才能把它们全部移除?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-04 21:43:42

考虑到你的评论,我想你最终会有两个BOMs。

让我们看一个小例子。我使用的是内置的open,而不是pd.read_csv/pd.to_csv,但是encoding参数的含义是相同的。

让我们用BOM创建一个保存为UTF-8的文件:

代码语言:javascript
运行
复制
>>> text = 'foo'
>>> with open('/tmp/foo', 'w', encoding='utf-8-sig') as f:
...     f.write(text)

现在让我们把它读回来。但是我们使用不同的编码方式:"utf-8“而不是"utf-8-sig”。在您的示例中,根本没有指定编码参数,但是默认值很可能是"utf-8“或"cp-1252",这两个参数都保留了BOM。因此,以下内容或多或少相当于您的代码片段:

代码语言:javascript
运行
复制
>>> with open('/tmp/foo', 'r', encoding='utf8') as f:
...     text = f.read()
... 
>>> text
'\ufefffoo'
>>> with open('/tmp/foo_converted', 'w', encoding='utf-8-sig') as f:
...     f.write(text)

BOM作为文本的一部分读取;它是第一个字符(此处表示为"\ufeff")。

让我们使用一个合适的命令行工具来查看文件中的实际内容:

代码语言:javascript
运行
复制
$ hexdump -C /tmp/foo
00000000  ef bb bf 66 6f 6f                                 |...foo|
00000006
$ hexdump -C /tmp/foo_converted 
00000000  ef bb bf ef bb bf 66 6f  6f                       |......foo|
00000009

在UTF-8中,BOM被编码为三个字节的EF BB BF.显然,第二个文件中有两个。因此,即使是BOM感知程序也会在foo_converted的开头找到一些非意义的字符,因为BOM只被剥离一次。

票数 6
EN

Stack Overflow用户

发布于 2022-11-19 21:00:11

对我来说,BOM是在第一列的名字前面。幸运的是,Pandas能够将其读入数据格式,BOM仍然位于第一列的前面。我遍历所有列以从第一个列名中删除BOM (因为我处理许多不同的csv文件源,所以无法确定第一个列名):

代码语言:javascript
运行
复制
     for column in df.columns: #Need to remove Byte Order Marker at beginning of first column name
        new_column_name = re.sub(r"[^0-9a-zA-Z.,-/_ ]", "", column)
        df.rename(columns={column: new_column_name}, inplace=True)

希望这能帮到某人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60064238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档