Closed sammosummo closed 9 years ago
xref #8863
this would be a relatively simple fix to adjust the regex to parse this format.
pull-requests are welcome!
Hey, I'm gonna try to work on this.
Here's me recreating the issue:
In [1]: from pandas import Timedelta
In [2]: Timedelta('0:00:00')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-2-d6c00d815c30> in <module>()
----> 1 Timedelta('0:00:00')
/Users/cgilmer/Projects/pandas-cgilmer/pandas/tslib.pyx in pandas.tslib.Timedelta.__new__ (pandas/tslib.c:30144)()
1752 elif util.is_string_object(value):
1753 from pandas import to_timedelta
-> 1754 value = to_timedelta(value,unit=unit,box=False)
1755 elif isinstance(value, timedelta):
1756 value = convert_to_timedelta64(value,'ns',False)
/Users/cgilmer/Projects/pandas-cgilmer/pandas/tseries/timedeltas.pyc in to_timedelta(arg, unit, box, coerce)
70
71 # ...so it must be a scalar value. Return scalar.
---> 72 return _coerce_scalar_to_timedelta_type(arg, unit=unit, box=box, coerce=coerce)
73
74 _unit_map = {
/Users/cgilmer/Projects/pandas-cgilmer/pandas/tseries/timedeltas.pyc in _coerce_scalar_to_timedelta_type(r, unit, box, coerce)
144
145 # we are already converting to nanoseconds
--> 146 converter = _get_string_converter(r, unit=unit)
147 r = converter()
148 unit='ns'
/Users/cgilmer/Projects/pandas-cgilmer/pandas/tseries/timedeltas.pyc in _get_string_converter(r, unit)
263
264 # no converter
--> 265 raise ValueError("cannot create timedelta string converter for [{0}]".format(r))
266
ValueError: cannot create timedelta string converter for [0:00:00]
Here's my attempted fix:
diff --git a/pandas/tseries/timedeltas.py b/pandas/tseries/timedeltas.py
index 91e75da..7333d0b 100644
--- a/pandas/tseries/timedeltas.py
+++ b/pandas/tseries/timedeltas.py
@@ -119,7 +119,7 @@ def _validate_timedelta_unit(arg):
_short_search = re.compile(
"^\s*(?P<neg>-?)\s*(?P<value>\d*\.?\d*)\s*(?P<unit>d|s|ms|us|ns)?\s*$",re.IGNORECASE)
_full_search = re.compile(
- "^\s*(?P<neg>-?)\s*(?P<days>\d*\.?\d*)?\s*(days|d|day)?,?\s*\+?(?P<time>\d{2}:\d{2}:\d{2})?(?P<frac>\.\d+)?\s*$",re.IGNORECASE)
+ "^\s*(?P<neg>-?)\s*(?P<days>\d*\.?\d*)?\s*(days|d|day)?,?\s*\+?(?P<time>\d{1,2}:\d{2}:\d{2})?(?P<frac>\.\d+)?\s*$",re.IGNORECASE)
_nat_search = re.compile(
"^\s*(nat|nan)\s*$",re.IGNORECASE)
_whitespace = re.compile('^\s*$')
Corrected output:
In [1]: from pandas import Timedelta
In [2]: Timedelta('0:00:00')
Out[2]: Timedelta('0 days 00:00:00')
@jreback - My PR is ready for you
closed by #9868
Timedelta('00:00:00')
works fine whereasTimedelta('0:00:00')
raises and error. Unsure whether to call this a bug, but under some circumstances thedatetime
module in pure python will produce time delta strings without the leading 0.