【问题标题】:Reading in csv file to pandas fails将 csv 文件读入 pandas 失败
【发布时间】:2017-08-15 10:12:46
【问题描述】:

我有一个通过将 Tableau 表导出到 csv 生成的 csv 文件,但我无法在 Python 中打开它。

我曾尝试使用 pd.read_csv 但失败了。

import pandas as pd

#path to file
path = "tableau_crosstab.csv"

data = pd.read_csv(path, encoding="ISO-8859-1") 

这适用于读取文件,但结果只是多行,每行一个字符,帧头部有一些奇怪的字符。

ÿþd
o    
m    
a    
i

等等。当我尝试在 Excel 中导入文件时,我必须选择选项卡作为分隔符,但是当我在这里尝试时它失败了

import pandas as pd

#path to file
path = "tableau_crosstab.csv"

data = pd.read_csv(path, encoding="ISO-8859-1", sep='\t') 

CParserError:标记数据时出错。 C 错误:第 7 行中应有 1 个字段,但看到了 2

我确实尝试使用编解码器打开文件,然后它说编码是“cp1252”,但使用它作为编码也失败了。

我也尝试使用 utf-8 读取它,但也失败了。 我已经没有办法解决这个问题了。

如果有人可以看一下,这是文件所在位置的链接 http://www.mediafire.com/file/6dtxo2deczwy3u2/tableau_crosstab.csv

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您有 unicode BOM,特别是 utf-16LE

    试试

    data = pd.read_csv(path, encoding="utf-16", sep='\t') 
    

    您看到的有趣字符:ÿþ 对应于十六进制 FF FE,它是 unicode-16 little endian 字节顺序标记。如果您看到维基百科页面,它会显示所有各种字节顺序标记

    阅读您的 csv 时,我得到以下信息:

    In[4]:
    data = pd.read_csv(r'C:\tableau_crosstab.csv', encoding='utf-16', sep='\t')
    data
    
    Out[4]: 
           domain Month of date impressions clicks
    0    test1.no        jun.17     725 676    633
    1    test1.no        mai.17     422 995    456
    2    test1.no        apr.17     241 102    316
    3    test1.no        mar.17     295 157    260
    4    test1.no        feb.17     122 902    198
    5    test1.no        jan.17     137 972    201
    6    test1.no        des.16     274 435    361
    7   test2.com        jun.17   3 083 373  1 638
    8   test2.com        mai.17   3 370 620  2 036
    9   test2.com        apr.17   2 388 933  1 483
    10  test2.com        mar.17   2 410 675  1 581
    11  test2.com        feb.17   2 311 952  1 682
    12  test2.com        jan.17   1 184 787    874
    13  test2.com        des.16   2 118 594  1 738
    14  test3.com        jun.17     411 456     41
    15  test3.com        mai.17     342 048     87
    16  test3.com        apr.17     197 058    108
    17  test3.com        mar.17     288 949    156
    18  test3.com        feb.17     230 970    130
    19  test3.com        jan.17     388 032    115
    20  test3.com        des.16   1 693 442    166
    21   test4.no        jun.17     521 790    683
    22   test4.no        mai.17     438 037    541
    23   test4.no        apr.17     618 282  1 042
    24   test4.no        mar.17     576 413    956
    25   test4.no        feb.17     451 248    636
    26   test4.no        jan.17     293 217    471
    27   test4.no        des.16     641 491    978
    

    【讨论】:

    • 它也对我有用。谢谢!因此,通过查看 ÿþ,您可以理解编码是 'utf-16' 吗?
    • 是的,如果您查看维基百科页面:en.wikipedia.org/wiki/…,您将看到十六进制值和显示的字符,您会习惯于看到这些并在一段时间后识别它们
    猜你喜欢
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2020-04-07
    • 2022-12-31
    • 2018-09-10
    • 1970-01-01
    • 2013-05-31
    相关资源
    最近更新 更多