diff --git a/pandas/core/format.py b/pandas/core/format.py index 0597a1ef0eb95..dca1976be838f 100644 --- a/pandas/core/format.py +++ b/pandas/core/format.py @@ -298,7 +298,7 @@ def to_latex(self, force_unicode=False, column_format=None): if column_format is None: column_format = '|l|%s|' % '|'.join('c' for _ in strcols) else: - assert isinstance(column_format, str) + assert isinstance(column_format, basestring) self.buf.write('\\begin{tabular}{%s}\n' % column_format) self.buf.write('\\hline\n') diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 66524e571497c..a8a7cca2fa788 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -1366,7 +1366,7 @@ def info(self, verbose=True, buf=None): counts = self.count() assert(len(cols) == len(counts)) for col, count in counts.iteritems(): - if not isinstance(col, (unicode, str)): + if not isinstance(col, basestring): col = str(col) lines.append(_put_str(col, space) + '%d non-null values' % count) diff --git a/pandas/io/parsers.py b/pandas/io/parsers.py index f01d769824734..88bad2a54f05c 100644 --- a/pandas/io/parsers.py +++ b/pandas/io/parsers.py @@ -156,7 +156,7 @@ def _read(cls, filepath_or_buffer, kwds): if skipfooter is not None: kwds['skip_footer'] = skipfooter - if isinstance(filepath_or_buffer, str) and _is_url(filepath_or_buffer): + if isinstance(filepath_or_buffer, basestring) and _is_url(filepath_or_buffer): from urllib2 import urlopen filepath_or_buffer = urlopen(filepath_or_buffer) if py3compat.PY3: # pragma: no cover diff --git a/pandas/io/tests/test_parsers.py b/pandas/io/tests/test_parsers.py index 8df1270679364..3c724fce28015 100644 --- a/pandas/io/tests/test_parsers.py +++ b/pandas/io/tests/test_parsers.py @@ -108,7 +108,12 @@ def test_empty_string(self): def test_read_csv(self): - pass + if not py3compat.PY3: + fname=u"file://"+unicode(self.csv1) + try: + df1 = read_csv(fname, index_col=0, parse_dates=True) + except IOError: + assert(False), "read_csv should accept unicode objects as urls" def test_dialect(self): data = """\ diff --git a/pandas/tseries/converter.py b/pandas/tseries/converter.py index fa046776285b9..fd869549d67f6 100644 --- a/pandas/tseries/converter.py +++ b/pandas/tseries/converter.py @@ -33,7 +33,7 @@ def _to_ordinalf(tm): return tot_sec def time2num(d): - if isinstance(d, str): + if isinstance(d, basestring): parsed = tools.to_datetime(d) if not isinstance(parsed, datetime): raise ValueError('Could not parse time %s' % d) @@ -150,7 +150,7 @@ def try_parse(values): return dates.date2num(values) elif (com.is_integer(values) or com.is_float(values)): return values - elif isinstance(values, str): + elif isinstance(values, basestring): return try_parse(values) elif isinstance(values, (list, tuple, np.ndarray)): if not isinstance(values, np.ndarray): diff --git a/pandas/tseries/tests/test_converter.py b/pandas/tseries/tests/test_converter.py new file mode 100644 index 0000000000000..ec019b2fd6f73 --- /dev/null +++ b/pandas/tseries/tests/test_converter.py @@ -0,0 +1,28 @@ +from datetime import datetime, time, timedelta +import sys +import os +import unittest + +import nose + +import numpy as np + +import pandas.tseries.converter as converter + +def test_timtetonum_accepts_unicode(): + assert(converter.time2num("00:01")==converter.time2num(u"00:01")) + +class TestDateTimeConverter(unittest.TestCase): + + def setUp(self): + self.dtc = converter.DatetimeConverter() + + def test_convert_accepts_unicode(self): + r1 = self.dtc.convert("12:22",None,None) + r2 = self.dtc.convert(u"12:22",None,None) + assert(r1==r2), "DatetimeConverter.convert should accept unicode" + +if __name__ == '__main__': + import nose + nose.runmodule(argv=[__file__,'-vvs','-x','--pdb', '--pdb-failure'], + exit=False) diff --git a/pandas/tseries/tools.py b/pandas/tseries/tools.py index 36bfca3ec2a7c..36a9f32bd04c4 100644 --- a/pandas/tseries/tools.py +++ b/pandas/tseries/tools.py @@ -36,7 +36,7 @@ def _infer(a, b): def _maybe_get_tz(tz): - if isinstance(tz, (str, unicode)): + if isinstance(tz, basestring): import pytz tz = pytz.timezone(tz) if com.is_integer(tz):