2012-08-06 201 views
0

我收到一个错误,使用熊猫date_range函数。我已经给出了下面的跟踪,并可以提供更多的上下文,但它似乎是我真的需要挖掘自己来解决的事情。熊猫:date_range错误

所以我想知道的是,如果有一种方法可以获取跟踪中提到的文件的源文件,特别是datetime.pyx,或Timestamp类的任何定义 - 我似乎无法找到它。我对Python非常青睐,不太了解包裹和来源的方式,但我希望如果我可以深入一点,我可以对此有所了解。

>>> d=process_files(args, options, False) 
Processing file K2.csv 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/tmp/py7041Jtp.py", line 158, in process_files 
    File "/tmp/py7041Jtp.py", line 81, in process_csv 
    File "/usr/local/lib/python2.7/dist-packages/pandas-0.8.1-py2.7-linux-x86_64.egg/pandas/tseries/index.py", line 1317, in date_range 
    freq=freq, tz=tz, normalize=normalize, name=name) 
    File "/usr/local/lib/python2.7/dist-packages/pandas-0.8.1-py2.7-linux-x86_64.egg/pandas/tseries/index.py", line 176, in __new__ 
    tz=tz, normalize=normalize) 
    File "/usr/local/lib/python2.7/dist-packages/pandas-0.8.1-py2.7-linux-x86_64.egg/pandas/tseries/index.py", line 254, in _generate 
    start = Timestamp(start) 
    File "datetime.pyx", line 87, in pandas.lib.Timestamp.__new__ (pandas/src/tseries.c:26892) 
    File "datetime.pyx", line 511, in pandas.lib.convert_to_tsobject (pandas/src/tseries.c:32019) 
    File "datetime.pyx", line 640, in pandas.lib._string_to_dts (pandas/src/tseries.c:33452) 
+0

什么是'process_files()'? – 2012-08-06 07:49:38

+0

它将一堆csv文件解析为数据框。虽然不是很重要 - 错误总是来源于熊猫的来源。 – scry 2012-08-06 08:25:50

回答

0

原来我只是解析错误的领域,即基于默认为None命令交换机上。没有清楚地思考:/

1

为了找到datetime.pyx,我建议先从:

find /usr/local/lib/python2.7 -name 'datetime.pyx' 

要找到时间戳类的定义,我会先从:

grep -r 'class Timestamp' /usr/local/lib/python2.7/dist-packages/pandas-0<tab> 
+0

Yup试过这些,但没有运气 - 可能要抓取源码 – scry 2012-08-06 08:05:50

+1

@roysc:[听起来不错](http://www.codinghorror.com/blog/2012/04/learn-to-read-the-source- luke.html)。祝你好运! – Lenna 2012-08-06 08:10:47

1

.pyx文件是Cython文件。您可能会发现它们已安装,但如果您未从源代码构建库,它们可能不会。然而,所有的熊猫源都可以在github上找到。 datetime.pyx的来源是here

Cython看起来很像Python,所以如果您只是想浏览源代码来找出导致错误的原因,您可能会发现查看Cython源代码很有用。但是你不能像普通的Python那样调试它,因为它不是。

+0

优秀的点...我永远不会记得Cython实际安装的文件。 – Lenna 2012-08-06 07:59:15

1

为了您的方便,我在下面复制了pandas.lib._string_to_dts的功能代码。 根据你的追踪,这是抛出异常的人。

cdef inline _string_to_dts(object val, pandas_datetimestruct* dts): 
    cdef: 
     npy_bool islocal, special 
     PANDAS_DATETIMEUNIT out_bestunit 
     int result 

    if PyUnicode_Check(val): 
     val = PyUnicode_AsASCIIString(val); 

    result = parse_iso_8601_datetime(val, len(val), PANDAS_FR_ns, 
            NPY_UNSAFE_CASTING, 
            dts, &islocal, &out_bestunit, &special) 
    if result == -1: 
     raise ValueError('Unable to parse %s' % str(val)) 

对我来说,它看起来像你pandas.date_range不能被解析到一个日期和您在process_csv代码抛出一个异常ValueError像在下面的例子中提供输入。

>>> import pandas 
>>> pandas.date_range('hello') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File ".../lib/python2.7/site-packages/pandas-0.8.2.dev_90842ba-py2.7-linux-x86_64.egg/pandas/tseries/index.py", line 1317, in date_range 
    freq=freq, tz=tz, normalize=normalize, name=name) 
    File "../lib/python2.7/site-packages/pandas-0.8.2.dev_90842ba-py2.7-linux-x86_64.egg/pandas/tseries/index.py", line 176, in __new__ 
    tz=tz, normalize=normalize) 
    File ".../lib/python2.7/site-packages/pandas-0.8.2.dev_90842ba-py2.7-linux-x86_64.egg/pandas/tseries/index.py", line 254, in _generate 
    start = Timestamp(start) 
    File "datetime.pyx", line 87, in pandas.lib.Timestamp.__new__ (pandas/src/tseries.c:26892) 
    File "datetime.pyx", line 511, in pandas.lib.convert_to_tsobject (pandas/src/tseries.c:32019) 
    File "datetime.pyx", line 640, in pandas.lib._string_to_dts (pandas/src/tseries.c:33452) 
ValueError: Unable to parse hello 
0

请在GitHub(或邮件列表)上发布潜在的错误报告。谢谢 - 虽然这确实得到了比GitHub更多的答案。