【问题标题】:Datetime format not accepted, did I mean .at?不接受日期时间格式,我的意思是 .at 吗?
【发布时间】:2022-10-13 15:36:22
【问题描述】:

我正在尝试按日期时间对 excel 文件进行排序。这是我的代码:

import pandas as pd
from datetime import datetime
from datetime import date

dagStart = datetime.strptime(str(date.today())+' 06:00:00', '%Y-%m-%d %H:%M:%S')
dagEind = datetime.strptime(str(date.today())+' 23:00:00', '%Y-%m-%d %H:%M:%S')

data = pd.read_excel('inzamelbestand.xlsx', index_col=9) 

data = data.loc[data['ingezameldop'].dt.time.between(dagStart.time(), dagEind.time())]

data.to_excel("oefenexcel.xlsx")

当我运行它时,它会给出以下消息:

Traceback (most recent call last):
  File "C:\Users\Inzamelhelden\orden.py", line 10, in <module>
    data = data.loc[data['ingezameldop'].dt.time.between(dagStart.time(), dagEind.time())]
  File "C:\Users\Inzamelhelden\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\generic.py", line 5907, in __getattr__
    return object.__getattribute__(self, name)
  File "C:\Users\Inzamelhelden\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\accessor.py", line 183, in __get__
    accessor_obj = self._accessor(obj)
  File "C:\Users\Inzamelhelden\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\core\indexes\accessors.py", line 513, in __new__
    raise AttributeError("Can only use .dt accessor with datetimelike values")
AttributeError: Can only use .dt accessor with datetimelike values. Did you mean: 'at'?

在我看来,日期时间格式不被接受,但我将如何解决这个问题?

【问题讨论】:

  • print (type(data['ingezameldop'].iat[0])) 是什么?

标签: python pandas datetime


【解决方案1】:

你可能有字符串,应该转换to_datetime

data = data.loc[pd.to_datetime(data['ingezameldop'])
                  .dt.time.between(dagStart.time(), dagEind.time())]

或者,如果您不介意在输出中使用 datetime 类型:

data['ingezameldop'] = pd.to_datetime(data['ingezameldop'])
# then as you did
data = data.loc[data['ingezameldop'].dt.time.between(dagStart.time(), dagEind.time())]

【讨论】:

    【解决方案2】:

    首先是必要的测试是什么:

    print (type(data['ingezameldop'].iat[0]))
    

    如果是时间使用:

    df = data[pd.to_datetime(data['ingezameldop'].between(dagStart.time(), dagEind.time())]
    

    如果 objecttimeDataFrame.between_time 对于 DatetimeIndex 使用:

    data['ingezameldop'] = pd.to_datetime(data['ingezameldop'].astype(str))
    df = data.set_index('ingezameldop').between_time('06:00:00', '23:00:00')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 2014-09-23
      相关资源
      最近更新 更多