为什么read_csv给我一个时区警告?



我尝试使用pandas读取CSV文件,并得到一个我不理解的警告:

Libsite-packagesdateutilparser_parser.py:1207: UnknownTimezoneWarning: tzname B identified but not understood.  Pass `tzinfos` argument in order to correctly return a timezone-aware datetime.  In a future version, this will raise an exception.
warnings.warn("tzname {tzname} identified but not understood.  "

我没有做什么特别的,只是pd.read_csvparse_dates=True。我在我的数据中没有看到任何看起来像时区的B。这个警告是什么意思?

一个最小可复制的例子如下:

import io
import pandas as pd
pd.read_csv(io.StringIO('xn1A2B'), index_col=0, parse_dates=True)

为什么熊猫认为1A2B是一个日期时间?

为了解决这个问题,我尝试添加dtype={'x': str}来强制列变成字符串。但我一直得到警告,不管…

结果显示1A2B被解释为"当前月的第2天上午1点,时区"。默认情况下,read_csv使用dateutil检测日期时间值(date_parser=):

import dateutil.parser
dateutil.parser.parse('1A2B')

除了警告,这返回(今天):

datetime.datetime(2023, 1, 2, 1, 0)

和B确实不是一个有效的时区说明符。

为什么添加dtype没有帮助还有待研究。

我找到了一个简单的方法:

import dateutil.parser
def dateparse(self, timestr, default=None, ignoretz=False, tzinfos=None, **kwargs):
return self._parse(timestr, **kwargs)
dateutil.parser.parser.parse = dateparse  # Monkey patch; hack!

这可以防止使用当前的日期/月/年作为默认值,将值呈现为无效的datetime

最新更新