【问题标题】:ParserError: hour must be in 0..23: 09/05/2019 24:00ParserError: 小时必须在 0..23: 09/05/2019 24:00
【发布时间】:2021-10-21 08:33:29
【问题描述】:

我有一个来自外部来源的数据集,我正在尝试使用 to_datetime() 方法将 Pandas 数据帧的索引获取到日期时间,但我不断收到错误消息。

ValueError: 小时必须在 0..23

ParserError: 小时必须在 0..23: 09/05/2019 24:00

我在我的 csv 中阅读如下:

dataframe = pandas.read_csv("file_name.csv", 
                              parse_dates = ['date'], 
                              dayfirst = True, 
                              index_col = 'date', 
                              header = 2, 
                              na_values = ['-99.0'])

我的输出如下所示:

                    co   no   no2   nox    o3  PM10  PM2.5  Unnamed: 8
datetime                                                              
09/05/2019 01:00  0.23  0.5   2.8   3.2  16.0   9.9    6.2         NaN
09/05/2019 02:00  0.23  0.2   1.9   2.1  18.1  10.3    5.7         NaN
09/05/2019 03:00  0.21  0.5   0.7   1.2  19.7  13.3    7.5         NaN
09/05/2019 04:00  0.21  0.5   1.5   1.9  18.2  13.0    5.5         NaN
09/05/2019 05:00  0.23  0.5   3.0   3.5  16.0  13.9    6.7         NaN
...                ...  ...   ...   ...   ...   ...    ...         ...
16/05/2019 20:00  0.70  8.2  20.3  28.1   1.4  30.3   25.4         NaN
16/05/2019 21:00  0.61  7.1  19.1  26.2   1.7  20.7   19.5         NaN
16/05/2019 22:00  0.44  1.8  11.7  13.5   8.1   7.7   11.1         NaN
16/05/2019 23:00  0.41  0.8   8.4   9.2  10.5   8.8    9.5         NaN
16/05/2019 24:00  0.46  0.8   8.5   9.4   9.3  12.4   10.2         NaN

由于某种原因,当我尝试使用以下代码转换为日期时间时,会出现上述错误消息

df.index = pd.to_datetime(df.index) 
print(df)

【问题讨论】:

    标签: python pandas dataframe datetime


    【解决方案1】:

    在导入时不要设置parse_dates - 而是在之后解析为日期时间,通过将字符串拆分为日期和时间,解析日期部分to datetime并添加时间部分as a timedelta

    例如:

    df = pd.DataFrame({'date': ["16/05/2019 23:00", "16/05/2019 24:00"]})
    
    df['datetime'] = (pd.to_datetime(df['date'].str.split(' ').str[0], dayfirst=True) 
                      + pd.to_timedelta(df['date'].str.split(' ').str[1] + ':00'))
    

    注意:to_timedelta 需要HH:MM:SS 格式,所以我在时间字符串中添加了':00'

    print(df['datetime'])
    0   2019-05-16 23:00:00
    1   2019-05-17 00:00:00
    Name: datetime, dtype: datetime64[ns]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      • 2014-09-27
      • 2020-01-19
      • 2011-04-07
      • 2015-03-21
      相关资源
      最近更新 更多