2014-06-18 37 views
5

我的CSV如下(MQM Q.csv):熊猫read_csv错误导入结果

Date-Time,Value,Grade,Approval,Interpolation Code 
31/08/2012 12:15:00,,41,1,1 
31/08/2012 12:30:00,,41,1,1 
31/08/2012 12:45:00,,41,1,1 
31/08/2012 13:00:00,,41,1,1 
31/08/2012 13:15:00,,41,1,1 
31/08/2012 13:30:00,,41,1,1 
31/08/2012 13:45:00,,41,1,1 
31/08/2012 14:00:00,,41,1,1 
31/08/2012 14:15:00,,41,1,1 

前几行没有“价值”的条目,但他们开始以后。

这里是我的代码:

import pandas as pd 
from StringIO import StringIO 
Q = pd.read_csv(StringIO("""/cygdrive/c/temp/MQM Q.csv"""), header=0, usecols=["Date-Time", "Value"], parse_dates=True, dayfirst=True, index_col=0) 

我收到以下错误:

Traceback (most recent call last): 
    File "daily.py", line 4, in <module> 
    Q = pd.read_csv(StringIO("""/cygdrive/c/temp/MQM Q.csv"""), header=0, usecols=["Date-Time", "Value"], parse_dates=True, dayfirst=True, index_col=0) 
    File "/usr/lib/python2.7/site-packages/pandas-0.14.0-py2.7-cygwin-1.7.30-x86_64.egg/pandas/io/parsers.py", line 443, in parser_f 
    return _read(filepath_or_buffer, kwds) 
    File "/usr/lib/python2.7/site-packages/pandas-0.14.0-py2.7-cygwin-1.7.30-x86_64.egg/pandas/io/parsers.py", line 228, in _read 
    parser = TextFileReader(filepath_or_buffer, **kwds) 
    File "/usr/lib/python2.7/site-packages/pandas-0.14.0-py2.7-cygwin-1.7.30-x86_64.egg/pandas/io/parsers.py", line 533, in __init__ 
    self._make_engine(self.engine) 
    File "/usr/lib/python2.7/site-packages/pandas-0.14.0-py2.7-cygwin-1.7.30-x86_64.egg/pandas/io/parsers.py", line 670, in _make_engine 
    self._engine = CParserWrapper(self.f, **self.options) 
    File "/usr/lib/python2.7/site-packages/pandas-0.14.0-py2.7-cygwin-1.7.30-x86_64.egg/pandas/io/parsers.py", line 1067, in __init__ 
    col_indices.append(self.names.index(u)) 
ValueError: 'Value' is not in list 
+0

你能格式化你的数据或提供一个链接吗,因为我不能重现你的错误,而且还不清楚格式化失败的位置 – EdChum

+0

Erm,你为什么要在文件名上调用StringIO? – DSM

+1

以下工作适用于我:'pd.read_csv(io.StringIO(temp),header = 0,usecols = [“Date-Time”,“Value”],parse_dates = True,dayfirst = True,index_col = 0)'那么当你没有必要使用StringIO的问题时呢? – EdChum

回答

3

这似乎与CSV解析器的错误,首先这个作品:

df = pd.read_csv('MQM Q.csv') 

也是这个原理:

df = pd.read_csv('MQM Q.csv', usecols=['Value']) 

但是如果我想Date-Time那么它失败,出现相同的错误消息作为你的。

所以我注意到它是UTF-8编码,所以我使用记事本++转换为ANSI,它的工作,然后我尝试没有BOM的utf-8,它也工作。

然后,我将它转换为utf-8(大概现在有一个BOM),它失败了,与之前的错误相同,所以我不认为你现在正在成像,这看起来像一个错误。

我使用python 3.3,熊猫0.14和numpy的1.8.1

要解决这个问题就这样:

df = pd.read_csv('MQM Q.csv', usecols=[0,1], parse_dates=True, dayfirst=True, index_col=0) 

这将索引设置日期时间列,这将正确地转换到日期时间索引。

In [40]: 

df.index 
Out[40]: 
<class 'pandas.tseries.index.DatetimeIndex'> 
[2012-08-31 12:15:00, ..., 2013-11-28 10:45:00] 
Length: 43577, Freq: None, Timezone: None 
+0

男人,提到BOM问题的大+1。我不知道我多少次与这个'错误'挣扎。刚刚保存的文件重新保存为UTF没有BOM,并立即生效。 – djnz0feh

+2

@ djnz0feh我认为实际上,如果你现在通过'encoding ='utf-8'',它应该可以工作:'df = pd.read_csv('MQM Q.csv',usecols = [0,1],parse_dates = True ,dayfirst = True,index_col = 0,encoding ='utf-8')' – EdChum

+0

应该在答案中 – Tunn

0

您的代码应阅读(从StringIO的在文件名中没有必要!):

import pandas as pd 
Q = pd.read_csv("/cygdrive/c/temp/MQM Q.csv"), header=0, usecols=["Date-Time", "Value"], parse_dates=True, dayfirst=True, index_col=0) 

否则/目前熊猫试图读取字符串(的路径)作为一个数据帧:

In [11]: pd.read_csv(StringIO("""/cygdrive/c/temp/MQM Q.csv""")) 
Out[11]: 
Empty DataFrame 
Columns: [/cygdrive/c/temp/MQM Q.csv] 
Index: [] 

这显然不是你想要的(所以你看到的值不列除外)。

+0

我的代码行出现以下错误... 'ValueError:'日期时间'不在列表中' –

0

下面的代码适用于我(我在脚本所在的目录中有CSV文件,但这应该不重要)。我正在我的Mac上,而不是Cygwin的下面的脚本,但它应该工作方式相同:

import pandas as pd 
Q = pd.read_csv("MQM Q.csv", 
     header=0, 
     parse_dates=True, 
     dayfirst=True, 
     index_col=0, 
     usecols=["Date-Time", "Value"]) 
print Q 

讨论

  • StringIO的将无法正常工作,除非你创建内容的新StringIO对象的文件,而不是文件的名称。
  • 我对“日期 - 时间”列没有任何问题。事实上,运行以前的代码没有错误。