[英]Why does read_csv give me a timezone warning?
我嘗試使用 pandas 讀取 CSV 文件並收到一條我不明白的警告:
Lib\site-packages\dateutil\parser\_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_csv
和parse_dates=True
。 我在我的數據中的任何地方都看不到看起來像時區的B
警告是什么意思?
一個最小的可重現示例如下:
import io
import pandas as pd
pd.read_csv(io.StringIO('x\n1A2B'), index_col=0, parse_dates=True)
為什么 pandas 認為1A2B
是日期時間?!
為了解決這個問題,我嘗試添加dtype={'x': str}
以將列強制為字符串。 但無論如何我都會收到警告......
結果1A2B
被解釋為“當月第 2 天凌晨 1 點,時區 B”。 默認情況下, 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
時間無效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.