python - CSV 中的 EM Dash 导致 Pandas 出现问题

标签 python csv pandas unicode utf-8

我在 csv 原始数据文件中遇到了 EM Dash 的问题,导致 Pandas 无法读取 CSV。

我运行了下面的一些变体

    datalocation = filepath
    df = pd.read_csv(datalocation)

收到错误:'UnicodeDecodeError:'ascii'编解码器无法解码位置 4 中的字节 0xef:序号不在范围 (128) 中'

其他变化包括

    df = pd.read_csv(datalocation, encoding='utf-8')
    df = pd.read_csv(datalocation, encoding='utf-16')

收到错误:'UnicodeDecodeError:'utf8'编解码器无法解码位置 0 中的字节 0xff:起始字节无效'

    df = pd.read_csv(datalocation, na_values=['—'])

收到错误:“行包含 NULL 字节”

如果成功,数据框应类似于下面的示例表。

+---------+------+----------+--------+
| Country | Date | Delivery | Region |
+---------+------+----------+--------+
| a       | —    | 10       | foo    |
| b       | —    | 30       | —      |
| c       | 2    | —50      | foo—   |
| —       | —    | 20       | —bar   |
| a       | —    | 40       | bar—   |
| —       | —    | —6—      | bar    |
| b       | —    | 90—      | foo    |
| c       | —    | 70       | bar    |
| a       | —    | 80       | foo    |
| c       | —    | 100      | foo—   |
+---------+------+----------+--------+

花时间研究 SO 上的资源后,我了解到它与 Unicode/UTF-8/ASCII 之间的一些冲突有关。

有没有办法在运行“pd.read_csv”之前删除所有 EM Dash?请记住,我不知道 csv 原始文件中所有 EM Dash 的精确单元格。

最佳答案

终于弄清楚了如何通过在读取数据集之前将数据集预处理到新文件中来做到这一点!希望与也遇到此问题的任何人分享该方法。

import os, re
import pandas as pd

EMDASH = '—'

with open('scrubbed_file','wt') as outfile:
    with open('original_file_location','rt') as infile:
        for line in infile:
            outfile.write(re.sub(EMDASH,'-',line))

df = pd.read_csv('scrubbed_file', engine='python',
                     encoding='utf_16_le',
                     names=['Country', 'Date', 'Delivery', 'Region'], 
                     delimiter='\t',
                     quotechar='"',
                     skiprows=2, skip_footer=2, thousands = ',')

希望这可以帮助任何在数据框中遇到问题的字符的人。

关于python - CSV 中的 EM Dash 导致 Pandas 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31685295/

相关文章:

java - BufferedReader 跳过第二行

python - 如何扩展输出显示以查看 Pandas DataFrame 的更多列?

python - 构建 Sphinx 文档

python - Python 抽象基类可以强制执行函数签名吗?

读取并绑定(bind)多个 csv 文件

python - Pandas read_csv() 适用于 Python 3 中的 CSV 文件,但在 Python 2 中返回 NaN

python - 输出不按行显示

python - 带约束的简单线性回归

python - 如何在 pandas df 中插入第二个标题行以进行 csv 写入

Pandas:使用嵌套 for 循环填充空列时未获得所需的输出