【问题标题】:Iterate over and perform function on python datetime objects迭代并在 python 日期时间对象上执行函数
【发布时间】:2019-04-13 10:22:16
【问题描述】:

没有使用 Python 的经验我无法正确处理日期时间对象,当我想要迭代它们时。我从 csv 文件导入时间戳并将它们解析为日期时间对象。现在我无法对它们执行功能,因为我一个接一个地收到错误。请看我的代码,是什么导致了“TypeError: 'datetime.datetime' object is not iterable”。

如果我的问题没有简单的解决方案,有人可以告诉我如何将日期时间对象保存到列表中吗?

我的代码功能受到这篇文章的启发,它适用于列表中的日期时间对象:Getting the closest date to a given date

提前致谢。

from datetime import datetime, timedelta
import pandas as pd

from dateutil.parser import parse

csvFile = pd.read_csv('myFile.csv')
column = csvFile['timestamp']

column = column.str.slice(0, 19, 1)

dt1 = datetime.strptime(column[1], '%Y-%m-%d %H:%M:%S')

print("dt1", dt1) #output: dt1 2010-12-30 15:06:00

dt2 = datetime.strptime(column[2], '%Y-%m-%d %H:%M:%S')

print("dt2", dt2) #output: dt2 2010-12-30 16:34:00

dt3 = dt1 - dt2

print("dt3", dt3) #output: dt3 -1 day, 22:32:00



#parsing the timestamps as datetime objects works:
for row in range(len(column)):
timestamp = datetime.strptime(column[row], '%Y-%m-%d %H:%M:%S')
print("timestamp", timestamp) #output (excerpt): timestamp 2010-12-30 14:32:00 timestamp 2010-12-30 15:06:00

这里出现错误:

base_date = dt1
def func(x):
    d = x[0]
    delta = d - base_date if d > base_date else timedelta.max
    return delta
min(timestamp, key = func)

【问题讨论】:

    标签: python function loops csv datetime


    【解决方案1】:

    timestamp 是 datetime.datetime 的一个实例,你应该把它放到一个列表或者一个元组中。 改正后应该是这样min([timestamp], key = func)

    【讨论】:

    • 这是我之前尝试过的,结果是“AttributeError: 'datetime.datetime' object has no attribute 'toList'”。我在解析时间戳后添加了 myNewList = timestamp.toList()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    • 2018-07-03
    • 2017-05-28
    • 2016-01-31
    相关资源
    最近更新 更多