Closed
Description
Hi
Something is wrong when trying to save a dataframe with tz-aware timestamps to xlsx, using pd.Dataframe.to_excel:
df = pd.DataFrame([1], index=[pd.Timestamp('2014-05-02', tz='CET')])
df.to_excel('test.xlsx')
yields an exception on my system:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-4e18a4be2a71> in <module>()
----> 1 df.to_excel('test.xlsx')
/home/silvio/prod34/lib/python3.4/site-packages/pandas/core/frame.py in to_excel(self, excel_writer, sheet_name, na_rep, float_format, cols, header, index, index_label, startrow, startcol, engine, merge_cells)
1202 formatted_cells = formatter.get_formatted_cells()
1203 excel_writer.write_cells(formatted_cells, sheet_name,
-> 1204 startrow=startrow, startcol=startcol)
1205 if need_save:
1206 excel_writer.save()
/home/silvio/prod34/lib/python3.4/site-packages/pandas/io/excel.py in write_cells(self, cells, sheet_name, startrow, startcol)
771 wks.write(startrow + cell.row,
772 startcol + cell.col,
--> 773 cell.val, style)
774
775 def _convert_to_style(self, style_dict, num_format_str=None):
/home/silvio/prod34/lib/python3.4/site-packages/xlsxwriter/worksheet.py in cell_wrapper(self, *args, **kwargs)
55 if len(args):
56 int(args[0])
---> 57 return method(self, *args, **kwargs)
58 except ValueError:
59 # First arg isn't an int, convert to A1 notation.
/home/silvio/prod34/lib/python3.4/site-packages/xlsxwriter/worksheet.py in write(self, row, col, *args)
374 # Write datetime objects.
375 if isinstance(token, date_types):
--> 376 return self.write_datetime(row, col, *args)
377
378 # Write number types.
/home/silvio/prod34/lib/python3.4/site-packages/xlsxwriter/worksheet.py in cell_wrapper(self, *args, **kwargs)
55 if len(args):
56 int(args[0])
---> 57 return method(self, *args, **kwargs)
58 except ValueError:
59 # First arg isn't an int, convert to A1 notation.
/home/silvio/prod34/lib/python3.4/site-packages/xlsxwriter/worksheet.py in write_datetime(self, row, col, date, cell_format)
666
667 # Convert datetime to an Excel date.
--> 668 number = self._convert_date_time(date)
669
670 # Add the default date format.
/home/silvio/prod34/lib/python3.4/site-packages/xlsxwriter/worksheet.py in _convert_date_time(self, dt_obj)
3265 def _convert_date_time(self, dt_obj):
3266 # Convert a datetime object to an Excel serial date and time.
-> 3267 return datetime_to_excel_datetime(dt_obj, self.date_1904)
3268
3269 def _options_changed(self):
/home/silvio/prod34/lib/python3.4/site-packages/xlsxwriter/utility.py in datetime_to_excel_datetime(dt_obj, date_1904)
577
578 # Convert a Python datetime.datetime value to an Excel date number.
--> 579 delta = dt_obj - epoch
580 excel_time = (delta.days
581 + (float(delta.seconds)
/home/silvio/prod34/lib/python3.4/site-packages/pandas/tslib.cpython-34m.so in pandas.tslib._Timestamp.__sub__ (pandas/tslib.c:11918)()
TypeError: can't subtract offset-naive and offset-aware datetimes
Using Python 3.4.0 on Arch Linux, list of installed packages:
~% pip freeze
Cython==0.20.1
Jinja2==2.7.2
MarkupSafe==0.21
Pygments==1.6
SQLAlchemy==0.9.4
XlsxWriter==0.5.3
ecdsa==0.11
ipdb==0.8
ipython==2.0.0
ipython-sql==0.3.1
lxml==3.3.5
matplotlib==1.3.1
mysql-connector-python==1.1.6
nose==1.3.1
numpy==1.8.1
openpyxl==1.8.5
pandas==0.13.1
paramiko==1.13.0
patsy==0.2.1
prettytable==0.7.2
psycopg2==2.5.2
pycrypto==2.6.1
pyodbc==3.0.7
pyparsing==2.0.2
python-dateutil==2.2
pytz==2014.2
requests==2.2.1
scipy==0.13.3
six==1.6.1
sqlparse==0.1.11
statsmodels==0.6.0
tornado==3.2
xlrd==0.9.3