簡體   English   中英

為什么 read_csv 會給我一個時區警告?

[英]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_csvparse_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM