python - XLDateAmbiguous 解决方法

标签 python pandas xlrd import-from-excel

将 Excel 文件读入 Python 通常意味着被 the Excel leap year issue 绊倒.这在许多帖子中都有描述,但没有一个提供方便的解决方案。所以这就是我要问的。使用如下代码:

import xlrd
from pandas import *

xlfile = 'test.xlsx'
wb = xlrd.open_workbook(xlfile)

sn = wb.sheet_names()
dfs = [read_excel(xlfile, x) for x in sn]

如何避免由此产生的问题*:

---------------------------------------------------------------------------
XLDateAmbiguous                           Traceback (most recent call last)
<ipython-input-8-1db99305e2ac> in <module>()
      1 sn = wb.sheet_names()
      2 
----> 3 dfs = [read_excel(xlfile, x) for x in sn]

/R/.virtualenv/pydata/lib/python2.7/site-packages/pandas/io/excel.pyc in read_excel(path_or_buf, sheetname, kind, **kwds)
     50     """
     51     return ExcelFile(path_or_buf,kind=kind).parse(sheetname=sheetname,
---> 52                                                   kind=kind, **kwds)
     53 
     54 class ExcelFile(object):

/R/.virtualenv/pydata/lib/python2.7/site-packages/pandas/io/excel.pyc in parse(self, sheetname, header, skiprows, skip_footer, index_col, parse_cols, parse_dates, date_parser, na_values, thousands, chunksize, **kwds)
    138                                      chunksize=chunksize,
    139                                      skip_footer=skip_footer,
--> 140                                      **kwds)
    141 
    142     def _should_parse(self, i, parse_cols):

/R/.virtualenv/pydata/lib/python2.7/site-packages/pandas/io/excel.pyc in _parse_excel(self, sheetname, header, skiprows, skip_footer, index_col, has_index_names, parse_cols, parse_dates, date_parser, na_values, thousands, chunksize, **kwds)
    194                 if parse_cols is None or should_parse[j]:
    195                     if typ == XL_CELL_DATE:
--> 196                         dt = xldate_as_tuple(value, datemode)
    197                         # how to produce this first case?
    198                         if dt[0] < datetime.MINYEAR:  # pragma: no cover

/R/.virtualenv/pydata/lib/python2.7/site-packages/xlrd/xldate.pyc in xldate_as_tuple(xldate, datemode)
     78 
     79     if xldays < 61 and datemode == 0:
---> 80         raise XLDateAmbiguous(xldate)
     81 
     82     jdn = xldays + _JDN_delta[datemode]

XLDateAmbiguous: 1.0

* changing the date system manually in Excel 除外在输入任何数据或用 NA 搜索/替换 1/1/1900 之前...

最佳答案

我已经成功了:

#Set local time to dataframe index
dat['local_time']=pd.to_datetime(dat[local_time_column_name], format=date_format)
dat=dat.set_index('local_time')
dat=dat.tz_localize(timezone, ambiguous='infer')

将 timezone-unknown 日期时间设置为数据帧索引,然后使用 ambiguous='infer' 标志。

关于python - XLDateAmbiguous 解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20391888/

相关文章:

python - 将不同列的分类数据合并到一列中

python - 检查行的日期范围是否与 Python/Pandas Dataframe 中的任何先前行日期范围重叠

python从excel创建字典

python - 无法在 python 3Traceback (最近一次调用最后) : File "<stdin>", 第 1 行中找出此错误,在 <module> NameError: name 'xlrd' 未定义

python - 如何在数据框中添加由字母数字组成的递增值的列和另一列包含随机数的列

python - Pandas - 自上次交易以来的计数

Python方法覆盖,签名重要吗?

python - 递归代码返回 None

python - 表格不存在时,Pandas pd.read_html错误代码

python excel处理错误