【问题标题】:Stopping Pandas from writing non-ASCII characters that aren't in the source阻止 Pandas 编写不在源代码中的非 ASCII 字符
【发布时间】:2016-09-29 19:18:22
【问题描述】:

使用 Pandas,我从资源中提取 CSV 并将其写入新的 CSV 以进行进一步处理。 Pandas 似乎正在将非 ASCII 字符写入第一个标题列,这些字符在源 CSV 中不存在。当 Pandas 写入 CSV 时,如何让 Pandas 忽略那些特殊字符(它们似乎没有改变)?

“计算机名称”必须包含特殊字符 (\xef\xbb\xbf),否则该列的 CSV 中没有写入任何内容。当我让 Pandas 将整个 CSV 下载到文件时,我发现字符是问题,但是当我将读数打印到终端时,特殊字符不存在。

pandasdata = pandas.read_csv(r'\\mydrive\resource.csv')
header = ["IP Address", "\xef\xbb\xbfComputer Name", "OS"]
pandasdata.to_csv('localresources.csv', columns = header)

根据要求,以下是查询 CSV 中哪些列的结果:

print(pandasdata.columns.tolist())

['\xef\xbb\xbfComputer Name', 'OS', 'Location', 'Serial', 'DeskID' 'IP Address']

【问题讨论】:

  • pandasdata.columns.tolist() 显示什么?你也确定它不是你文件中的unicode BOM吗?试试pandasdata = pandas.read_csv(r'\\mydrive\resource.csv', encoding='utf-8')pandasdata = pandas.read_csv(r'\\mydrive\resource.csv', encoding='utf-16')
  • @EdChum UTF-8 错误与 ascii 编解码器无法在位置 9 编码字符 u'\xae':序数不在范围内 (128)。 CParserError 的 UTF-16 错误:错误标记数据。 C 错误:在源上调用 read(nbytes) 失败。试试 engine='python' 。对于您的第一个建议,我应该把它放在哪里?
  • 使用print(pandasdata.columns.tolist()) 的输出编辑您的问题,这将显示您的列是否具有某种 duff 值,然后您可以通过执行 df.columns = ["IP Address", "Computer Name", "OS"] 来覆盖列的名称摆脱奇怪的符号
  • @EdChum 我已编辑问题以包含 tolist() 结果。在查找了您提出的进一步研究方法后,我在一个单独的问题上找到了答案,该问题与仅更改一个字段有关。谢谢!
  • 在我看来 \xef\xbb\xbf 是 utf-8 BOM:en.wikipedia.org/wiki/… 我不知道您的数据与您之前的评论相比还有什么问题,除非您包含链接到原始数据

标签: python-2.7 csv pandas


【解决方案1】:

似乎重命名列本身对我有用,而不是告诉 Pandas 忽略特殊字符。以下是我阅读 CSV 后使用的代码。重命名后,我将新名称包含在标题列表中。不知道为什么 Pandas 会编写特殊字符,因为它们不是源 CSV 的一部分。

df.rename(columns = {'\xef\xbb\xbfComputer Name':'Computer Name'}, inplace = True

【讨论】:

    猜你喜欢
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 2011-08-05
    • 2016-12-09
    相关资源
    最近更新 更多