Esempio n. 1
0
File: tools.py Progetto: frrp/pandas
def to_datetime(arg, errors='ignore', dayfirst=False):
    """
    Convert argument to datetime

    Parameters
    ----------
    arg : string, datetime, array of strings (with possible NAs)
    errors : {'ignore', 'raise'}, default 'ignore'
        Errors are ignored by default (values left untouched)

    Returns
    -------
    ret : datetime if parsing succeeded
    """
    from pandas.core.series import Series
    from pandas.tseries.index import DatetimeIndex
    if arg is None:
        return arg
    elif isinstance(arg, datetime):
        return arg
    elif isinstance(arg, Series):
        values = lib.string_to_datetime(com._ensure_object(arg.values),
                                        raise_=errors == 'raise',
                                        dayfirst=dayfirst)
        return Series(values, index=arg.index, name=arg.name)
    elif isinstance(arg, (np.ndarray, list)):
        if isinstance(arg, list):
            arg = np.array(arg, dtype='O')
        result = lib.string_to_datetime(com._ensure_object(arg),
                                        raise_=errors == 'raise',
                                        dayfirst=dayfirst)
        if com.is_datetime64_dtype(result):
            result = DatetimeIndex(result)
        return result
    try:
        if not arg:
            return arg
        return _dtparser.parse(arg, dayfirst=dayfirst)
    except Exception:
        if errors == 'raise':
            raise
        return arg
Esempio n. 2
0
    def test_string_na_nat_conversion(self):
        # GH #999, #858

        from dateutil.parser import parse
        from pandas.core.datetools import to_datetime

        strings = np.array(['1/1/2000', '1/2/2000', np.nan,
                            '1/4/2000, 12:34:56'], dtype=object)

        expected = np.empty(4, dtype='M8')
        for i, val in enumerate(strings):
            if com.isnull(val):
                expected[i] = NaT
            else:
                expected[i] = parse(val)

        result = lib.string_to_datetime(strings)
        assert_almost_equal(result, expected)

        result2 = to_datetime(strings)
        assert_almost_equal(result, result2)

        malformed = np.array(['1/100/2000', np.nan], dtype=object)
        result = to_datetime(malformed)
        assert_almost_equal(result, malformed)

        self.assertRaises(ValueError, to_datetime, malformed,
                          errors='raise')

        idx = ['a', 'b', 'c', 'd', 'e']
        series = Series(['1/1/2000', np.nan, '1/3/2000', np.nan,
                         '1/5/2000'], index=idx, name='foo')
        dseries = Series([to_datetime('1/1/2000'), np.nan,
                          to_datetime('1/3/2000'), np.nan,
                          to_datetime('1/5/2000')], index=idx, name='foo')

        result = to_datetime(series)
        dresult = to_datetime(dseries)

        expected = Series(np.empty(5, dtype='M8[us]'), index=idx)
        for i in range(5):
            x = series[i]
            if isnull(x):
                expected[i] = NaT
            else:
                expected[i] = to_datetime(x)

        assert_series_equal(result, expected)
        self.assertEquals(result.name, 'foo')

        assert_series_equal(dresult, expected)
        self.assertEquals(dresult.name, 'foo')
Esempio n. 3
0
    def test_string_na_nat_conversion(self):
        # GH #999, #858

        from dateutil.parser import parse

        strings = np.array(["1/1/2000", "1/2/2000", np.nan, "1/4/2000, 12:34:56"], dtype=object)

        expected = np.empty(4, dtype="M8")
        for i, val in enumerate(strings):
            if com.isnull(val):
                expected[i] = NaT
            else:
                expected[i] = parse(val)

        result = lib.string_to_datetime(strings)
        assert_almost_equal(result, expected)

        result2 = to_datetime(strings)
        assert_almost_equal(result, result2)

        malformed = np.array(["1/100/2000", np.nan], dtype=object)
        result = to_datetime(malformed)
        assert_almost_equal(result, malformed)

        self.assertRaises(ValueError, to_datetime, malformed, errors="raise")

        idx = ["a", "b", "c", "d", "e"]
        series = Series(["1/1/2000", np.nan, "1/3/2000", np.nan, "1/5/2000"], index=idx, name="foo")
        dseries = Series(
            [to_datetime("1/1/2000"), np.nan, to_datetime("1/3/2000"), np.nan, to_datetime("1/5/2000")],
            index=idx,
            name="foo",
        )

        result = to_datetime(series)
        dresult = to_datetime(dseries)

        expected = Series(np.empty(5, dtype="M8[us]"), index=idx)
        for i in range(5):
            x = series[i]
            if isnull(x):
                expected[i] = NaT
            else:
                expected[i] = to_datetime(x)

        assert_series_equal(result, expected)
        self.assertEquals(result.name, "foo")

        assert_series_equal(dresult, expected)
        self.assertEquals(dresult.name, "foo")