Pandas ValueError: 'Date'不在列表中。

4

我正在学习Pandas的“菜谱”第一章,bikes.csv例子。当我尝试将parse_dates更改为['Date'],dayfirst=True,并将index_col更改为日期,如下所示:(在菜谱第1章的第6行)

fixed_df = pd.read_csv('../data/bikes.csv', sep=';', encoding='latin1', parse_dates=['Date'], dayfirst=True, index_col='Date')

我得到了这个错误信息: ValueError: 'Date' 不在列表中。 在我写这篇文章之前,我尝试了以下解决方案:

第一种: utf-8 bom问题

据我所知,UTF-8中的BOM会引起一些问题,并导致此错误。此外,“日期”行在读取时被Pandas接受为一个元组?(如果我用错误的词写了这句话,非常抱歉,但这是我记得的,我不是Python专家)。我尝试使用以下建议进行编码转换: "utf-8-sig "编解码器提供了一个没有BOM的Unicode字符串:

fp = open("file.txt")
s = fp.read()
u = s.decode("utf-8-sig")

即使我没有收到任何错误提示,但它仍然无法工作。

第二点:Vim是我尝试用来改变编码方式的工具。

iconv -f UTF-8 -t ISO-8859-1 infile.txt > outfile.txt

and this,

vim +"set nobomb | set fenc=utf8 | x" filename.txt

它们都不起作用。

第三步:我尝试使用vim打开文件时修改文件编码。

set fileencoding=utf-8-sig(以及其他可能的编码,如ANSI、ASCII等)。

我遇到了这个错误:

E213: 无法转换(添加!以无需转换写入)

请帮助我,我错在哪里?非常感谢。


1
尝试使用以下代码读取数据集:pd.read_csv('../data/bikes.csv', sep=';', encoding='utf-8-sig', parse_dates=['Date'], dayfirst=True, index_col='Date')pd.read_csv('../data/bikes.csv', sep=';', encoding='utf-16', parse_dates=['Date'], dayfirst=True, index_col='Date') - MaxU - stand with Ukraine
1
使用 Python 3.5 pandas 0.20.3,pd.read_csv('https://raw.githubusercontent.com/jvns/pandas-cookbook/master/data/bikes.csv', sep=';', encoding='latin1', parse_dates=['Date'], dayfirst=True, index_col='Date')可以正常工作。 - ayhan
@MaxU 不是我的文件,它叫做comptagevelo2012.csv,这是文件的链接[link ] (http://donnees.ville.montreal.qc.ca/dataset/f170fecc-18db-44bc-b4fe-5b0b6d2c7297/resource/d54cec49-349e-47af-b152-7740056d7311/download/comptagevelo2012.csv)。 - Z.Grey
顺便说一下,我也尝试了在这段代码中使用'index_col=0':'(...sep=";", encoding="latin1", parse_dates=True, dayfirst=True, index_col=0 usecols=["Date-Time", "Value"])',但会出现“ValueError: Usecols do not match names.”的错误提示。如果我不使用'usecols',那么它至少不会出现任何错误,但我无法修改日期。 - Z.Grey
@Z.Grey,HTTP错误是由于评论中的格式问题,因此我发布了一个答案。请尝试答案中的代码。 - ayhan
显示剩余10条评论
1个回答

6
使用您提供的URL
url = 'http://donnees.ville.montreal.qc.ca/dataset/f170fecc-18db-44bc-b4fe-5b0b6d2c7297/resource/d54cec49-349e-47af-b152-7740056d7311/download/comptagevelo2012.csv'

df = pd.read_csv(url, sep=',', parse_dates={'datetime':[0, 1]}, index_col='datetime')

df.head()

提供

            Rachel / Papineau  Berri1  Maisonneuve_2  Maisonneuve_1  Brébeuf  \
datetime                                                                       
2012-01-01                 16      35             51             38      5.0   
2012-02-01                 43      83            153             68     11.0   
2012-03-01                 58     135            248            104      2.0   
2012-04-01                 61     144            318            116      2.0   
2012-05-01                 95     197            330            124      6.0   

我已经修改了sepencoding参数,因为该文件中的分隔符是逗号,编码方式是utf-8(即read_csv的默认值)。时间列未命名,您也可以使用它来进行解析。在这个例子中,我认为它们都是零,但在其他情况下可能会有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接