我有一个在 Raspberry Pi 上运行的程序,我想每 15 分钟在整点的 0、15、30 和 45 分钟从温度计中提取一些数据。
我已经使用 while 循环尝试过此操作,之前我有效地使用了 time.sleep(900),但有时会偏离整点后的 0、15、30 和 45 分钟。
目前我有这个;
from datetime import datetime
def run(condition):
while condition == True:
if (datetime.now().minute == (0 or 15 or 30 or 45)):
#perform some task
temperature_store()
Run Code Online (Sandbox Code Playgroud)
为简单起见,我没有深入了解Temperature_store() 的作用,但它从插入 Pi 的传感器读取温度,然后将其打印出来。
我希望Temperature_store() 每 15 分钟发生一次,但目前,它每秒发生一次。
我知道这可能是因为我的 while 循环的逻辑/语法错误,但我无法弄清楚。(对python脚本没有太多经验,耽误时间)。
我有这样的字符串'03-21-2019',我想转换为本地 Python 日期时间对象:即datetime.datetime类型。转换很容易通过pandas:
import pandas as pd
import datetime as dt
date_str = '03-21-2019'
pd_Timestamp = pd.to_datetime(date_str)
py_datetime_object = pd_Timestamp.to_pydatetime()
print(type(py_datetime_object))
Run Code Online (Sandbox Code Playgroud)
结果
<class 'datetime.datetime'>
Run Code Online (Sandbox Code Playgroud)
这正是我想要的,因为我想timedelta通过从另一个中减去其中一个来计算's - 在本机 Pythondatetime.datetime类中完美定义。但是,我的数据在pd.DataFrame. 当我尝试以下代码时:
import pandas as pd
import datetime as dt
df = pd.DataFrame(columns=['Date'])
df.loc[0] = ['03-21-2019']
df['Date'] = df['Date'].apply(lambda x:
pd.to_datetime(x).to_pydatetime())
print(type(df['Date'].iloc[0]))
Run Code Online (Sandbox Code Playgroud)
结果是
<class 'pandas._libs.tslibs.timestamps.Timestamp'>
Run Code Online (Sandbox Code Playgroud)
这是错误的类型,我一生都无法弄清楚为什么只有一部分lambda表达式被评估(即字符串到熊猫时间戳),而不是最后一部分(即熊猫-时间戳到日期时间。日期时间)。如果我显式定义函数,而不是使用lambda表达式,它也不起作用:
import pandas as pd
import datetime as dt
def …Run Code Online (Sandbox Code Playgroud) 我是 python 的初学者,我有一个函数需要以类似于此的格式显示当前日期、时间、月份、年份。
Mon Jun 22 14:00:03 UTC 2020
Run Code Online (Sandbox Code Playgroud)
我看到了预定义的日期时间类,但我不确定如何利用此类来导出这种格式(UTC)的当前日期。
任何帮助深表感谢。提前致谢。
所以我有 -
timezone = pytz.timezone('Asia/Kolkata')
one_time_stamp = '2017-06-01 05:30:00'
zoned_time_stamp = datetime.datetime.strptime(one_time_stamp, '%Y-%m-%d %H:%M:%S')
#This outputs 2017-06-01 05:30:00 which is fine.
print(zoned_time_stamp)
#notice timezone added
non_iso_zoned_ts = zoned_time_stamp.replace(microsecond=0, tzinfo=timezone)
# This outputs 2017-06-01 05:30:00 which is fine.
print(zoned_time_stamp)
iso_date = non_iso_zoned_ts.isoformat()
#This outputs 2017-06-01T05:30:00+05:53 which is incorrect. Ideally it should be 2017-06-01T05:30:00+05:30
print(iso_date)
Run Code Online (Sandbox Code Playgroud)
现在我想知道为什么 isoformat 添加了 05:53 的偏移量,而亚洲/加尔各答时区是 +05:30。参考 - https://www.zeitverschiebung.net/en/timezone/asia--kolkata
我正在尝试使用以下函数获取两个日期之间的天数
df['date'] = pd.to_datetime(df.date)
# Creating a function that returns the number of days
def calculate_days(date):
today = pd.Timestamp('today')
return today - date
# Apply the function to the column date
df['days'] = df['date'].apply(lambda x: calculate_days(x))
Run Code Online (Sandbox Code Playgroud)
结果看起来像这样
153 天 10:16:46.294037
但我想让它说153。我该如何处理这个问题?
我的数据框中有两列 - 开始日期和完成日期(它是时间戳)。我想通过找出差异来计算运行时间。当我运行下面的代码时,出现错误:TypeError: cannot subtract DatetimeArray from ndarray。我也无法将完成日期列拆分为日期和时间,以便我可以以另一种方式计算运行时间。
# calculate runtime
pd.to_datetime(df.start_date)
pd.to_datetime(df.finish_date)
diff = pd.to_datetime(df.finish_date) - pd.to_datetime(df.start_date)
Run Code Online (Sandbox Code Playgroud)
数据框如下所示: df
file_name unique_id start_date finish_date
file1 1716b94a8d8d83c8fffe4bdd14d536ae1ee9cba6bf17e6... 2020-09-03T16:18:38.929863799Z 2020-09-03T16:20:17.615093582Z
file2 87ff84ab119b798312230fceb3a8730fe74669a373650a... 2020-09-03T16:26:25.075167073Z 2020-09-04T00:04:39.702686798Z
Run Code Online (Sandbox Code Playgroud)
我怎么能够 -
我想将 datetime.datetime 对象写入文件,因为我的机器人整夜停机,我需要它检查从该时间点到当前消息的所有消息,但我找不到解决方案如何做到这一点。文件类型并不重要,只要我可以向其中写入 datetime.datetime 对象并可以从中读取它(但我更喜欢 JSON,因为我已经有了一个用于写入、读取的系统,...为此)。
我尝试将其作为原始 datetime.datetime 写入 JSON 文件,并尝试将其作为原始 datetime.datetime 写入 txt 文件,但.write()两者都不起作用,因为它们不接受该类型。
机器人关闭时:
async for message in channel.history(limit=1):
lastmsg = message.created_at
jsonhandle.update("last_message", lastmsg, "lastmsg")
Run Code Online (Sandbox Code Playgroud)
调用方式on_ready:
last_message = jsonhandle.get("last_message", "lastmsg")
chistory = await channel.history(after=last_message).flatten()
Run Code Online (Sandbox Code Playgroud) 我正在尝试将假数据插入到该表中。它不能完全随机,因为行需要有意义。下面我来解释一下。
我的数据如下所示:
| 帐号 | 帐户状态 | 开始日期 | 结束日期 |
|---|---|---|---|
| C382861922 | 积极的 | 2016-05-25 | 没有任何 |
| C382861922 | 不活动 | 没有任何 | 没有任何 |
| C382861922 | 积极的 | 没有任何 | 没有任何 |
| C382861922 | 不活动 | 没有任何 | 2021-12-31 |
| C429768513 | 积极的 | 2015-12-27 | 没有任何 |
| C429768513 | 不活动 | 没有任何 | 没有任何 |
| C429768513 | 积极的 | 没有任何 | 没有任何 |
| C429768513 | 不活动 | 没有任何 | 没有任何 |
| C429768513 | 积极的 | 没有任何 | 没有任何 |
| C429768513 | 不活动 | 没有任何 | 没有任何 |
| C429768513 | 积极的 | 没有任何 | 没有任何 |
| C429768513 | 不活动 | 没有任何 | 2021-12-31 |
| C643625629 | 积极的 | 2016-07-24 | 没有任何 |
| C643625629 | 不活动 | 没有任何 | 没有任何 |
| C643625629 | 积极的 | 没有任何 | 2021-12-31 |
| C82157435 | 积极的 | 2016-10-22 | 没有任何 |
| C82157435 | 不活动 | 没有任何 | 2021-12-31 |
每个 AcctID 可以出现多次,但最容易解释我在做什么,仅举一个 AcctID 出现两次的例子:
| 帐号 … |
|---|
我如何将两个 df 列添加在一起(日期+周):
这对我有用:
df['Date'] = pd.to_datetime(startDate, format='%Y-%m-%d') + datetime.timedelta(weeks = 3)
但是,当我尝试从列中添加周时,出现类型错误:timedelta 周组件不支持的类型:系列
df['Date'] = pd.to_datetime(startDate, format='%Y-%m-%d') + datetime.timedelta(weeks = df['Duration (weeks)'])
希望有任何帮助谢谢!
我正在尝试创建一个 while 循环,它将在 2 个时间对象之间迭代,while datetime.datetime.now().time() <= datetime.datetime.now() +relativedelta(hour=1):但每隔 n 分钟或秒间隔一次。因此,如果开始时间为凌晨 1:00,则下一次迭代应在凌晨 1:05 开始,其中 n 为 5 分钟。因此,迭代应该在开始时间的 5 分钟后开始,而不是从迭代结束时开始,使用 时就是这种情况sleep。您能否告知如何实现这一点?
一个可能的解决方案是从这里开始: 编写每 5 分钟执行一次的 python 脚本
import schedule
import time
def func():
print("this is python")
schedule.every(5).minutes.do(func)
while True:
schedule.run_pending()
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
这样,开始时间必须是凌晨 1 点。其次,如果程序需要运行 5 分钟 + 1,该怎么办?在这种情况下,6 分钟的间隔将不起作用。
python-datetime ×10
python ×8
datetime ×4
pandas ×4
dataframe ×2
python-3.x ×2
discord.py ×1
pytz ×1
raspberry-pi ×1
time ×1
while-loop ×1