繁体   English   中英

CSV中的EM Dash导致Pandas问题

[英]EM Dash in CSV causing issues with Pandas

我在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 = ',')

希望这对任何在数据框架中遇到问题字符的人有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM