【发布时间】: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