当前位置: 首页 > 知识库问答 >
问题:

EM冲入CSV导致熊猫问题

潘弘壮
2023-03-14

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

我在下面运行了一些变体

    datalocation = filepath
    df = pd.read_csv(datalocation)

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

其他变化包括

    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=['—'])

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

如果成功,dataframe应该类似于下面的示例表。

+---------+------+----------+--------+
| 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—   |
+---------+------+----------+--------+

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

是否有办法在运行“pd”之前移除所有EM破折号。读_csv'?请记住,我不知道csv原始文件中所有EM破折号的精确单元格。

共有1个答案

谢善
2023-03-14

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

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文件读入pandas数据帧的(我可以使用它进行统计操作,可以有不同类型的列,等等)? 我的CSV文件有以下内容: 在R中,我们将使用以下方法读取此文件: 这将返回一个R数据。框架: 有没有类似python的方法来获得相同的功能?

  • 问题内容: 如果“文件名”不存在,我想使用pd.write_csv写入“文件名”(带有标题),否则,如果存在“文件名”,则附加到文件名中。如果我只使用命令: 写入或追加成功,但似乎每次进行追加时都会写入标头。 如果文件不存在,如何只添加标题,如果文件存在,如何不添加标题而追加标题? 问题答案: 不确定熊猫是否有办法,但是检查文件是否存在将是一种简单的方法:

  • 问题内容: 我正在编写一个脚本,以将带有标头的大.xlsx文件减少到一个csv中,然后根据标头名称仅写有所需列的新csv文件。 我得到的错误是最后一部分代码,它说 我确定我忽略了一些愚蠢的事情,但是我已经阅读了熊猫网站上的to_csv文档,但我仍然感到茫然。我知道我使用了不正确的to_csv参数,但我似乎无法理解我猜的文档。 任何帮助表示赞赏,谢谢! 问题答案: 选择特定列的方法是这样的-

  • 问题内容: 使用Pandas或CSV模块将每行具有不同列数的CSV导入Pandas DataFrame的最佳方法是什么。 使用此代码: 产生以下错误 问题答案: 在read_csv()中提供列名列表应该可以解决问题。 例如:names = [‘a’,’b’,’c’,’d’,’e’] https://github.com/pydata/pandas/issues/2981 编辑:如果您不想提供列名,

  • 根据我对左向外连接的理解,结果表的行永远不会比左表多...请让我知道如果这是错的... 我的左表是192572行8列。 我右边的表格是42160行和5列。 我的左表有一个名为“id”的字段,它与我的右表中名为“key”的列相匹配。 因此,我将它们合并为: 但是然后组合的形状是236569。 我有什么误会?