问题。在我的 Django 应用程序中,用户为计划执行创建任务。用户是非常非技术性的,如果他们能编写传统的人类可读的表达式来定义何时执行某些任务,那就太好了,例如:
这是受Todoist 的启发。目前,只需要日期;没有时间。我花了几个小时在谷歌上搜索图书馆来做到这一点,但没有运气。我期待一个函数,比如说in_range(expression, date),这样:
>>> in_range('every monday, wednesday', date(2014, 4, 28))
True
>>> in_range('every end of month', date(2014, 5, 12))
False
>>> in_range('every millenium', date(2014, 5, 8))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: unknown token "millenium".
Run Code Online (Sandbox Code Playgroud)
变体。这就是我看过的。
datetime库进行日期解析,但不进行上述日期范围解析。rrule,非常实用,但仍然不支持解析。那么,是否有我错过的 Python …
使用 Python 2.6.x 的 xmlrpclib 在客户端和服务器之间交换的消息在服务器端创建了一种“实例”类型,而不是“日期时间”类型。在客户端,我创建了一个新的
updateTime = datetime(year, month, day, hour, minute, second)
print type(updateTime)
print updateTime
Run Code Online (Sandbox Code Playgroud)
结果是
<type 'datetime.datetime'>
2015-10-07 10:21:52
Run Code Online (Sandbox Code Playgroud)
发送时,字典在客户端看起来像这样:
'updateTime': datetime.datetime(2015, 10, 7, 10, 21, 52)
Run Code Online (Sandbox Code Playgroud)
但是服务器端的传入字典是这样的:
'updateTime': <DateTime '20151007T10:21:52' at 7f4dbf4ceb90>
Run Code Online (Sandbox Code Playgroud)
打印类型及其字符串表示如下:
<type 'instance'>
20151007T10:21:52
Run Code Online (Sandbox Code Playgroud)
我们正在使用 xmlrpclib.ServerProxy 但将use_datetime更改为True或False根本没有任何区别。
xmlrpclib.ServerProxy('https://'+rpc_server_addr, allow_none=True, use_datetime=True)
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我也希望接收方有一个 tpye 'datetime.datetime'。
有两个数据框。首先是这样的:
print df1
id date month is_buy
0 17 2015-01-16 2015-01 1
1 17 2015-01-26 2015-01 1
2 17 2015-01-27 2015-01 1
3 17 2015-02-11 2015-02 1
4 17 2015-03-14 2015-03 1
5 18 2015-01-28 2015-01 1
6 18 2015-02-12 2015-02 1
7 18 2015-02-25 2015-02 1
8 18 2015-03-04 2015-03 1
Run Code Online (Sandbox Code Playgroud)
在第二个数据框中,有一些来自第一个的按月汇总的数据:
df2 = df1[df1['is_buy'] == 1].groupby(['id', 'month']).agg({'is_buy': np.sum})
print df2
id month buys
0 17 2015-01 3
1 17 2015-02 1
2 17 2015-03 1
3 18 2015-01 …Run Code Online (Sandbox Code Playgroud) 是否可以使用 df.apply 来获取属性而不是运行函数?我想从日期中检索年份以执行 groupby。例如 ..
import pandas as pd
import datetime
import numpy as np
df = pd.DataFrame({'date': [datetime.datetime(2010,1,1)+datetime.timedelta(days=i*15)
for i in range(0,100)]})
Run Code Online (Sandbox Code Playgroud)
这工作..
df['year'] = [d.year for d in df['date']]
Run Code Online (Sandbox Code Playgroud)
这也有效..
df['year'] = df['date'].apply(lambda x: x.year)
Run Code Online (Sandbox Code Playgroud)
但这不..
df['year'] = df['date'].apply(year)
Run Code Online (Sandbox Code Playgroud)
这也不..
df['year'] = df['date'].year
Run Code Online (Sandbox Code Playgroud)
这样做的最有效方法是什么?
我正在尝试使用 pandas to_datetime 将自纪元以来的秒数值(包括微秒精度)数组转换为日期时间格式,如下所示:
x = 1487187300.038075
time = pd.to_datetime(x, unit='s')
Run Code Online (Sandbox Code Playgroud)
这成功地转换为时间戳,但微秒精度下降(或至少不可见),产生:
Timestamp('2017-02-15 19:35:00')
Run Code Online (Sandbox Code Playgroud)
关于如何在不损失精度的情况下进行转换有什么建议吗?到目前为止,我的搜索都没有找到 OP 关心保持微秒精度的例子。
我有一个没有每个日期的时间序列(即交易日期)。系列可以在这里复制。
dates=pd.Series(np.random.randint(100,size=30),index=pd.to_datetime(['2010-01-04', '2010-01-05', '2010-01-06', '2010-01-07',
'2010-01-08', '2010-01-11', '2010-01-12', '2010-01-13',
'2010-01-14', '2010-01-15', '2010-01-19', '2010-01-20',
'2010-01-21', '2010-01-22', '2010-01-25', '2010-01-26',
'2010-01-27', '2010-01-28', '2010-01-29', '2010-02-01',
'2010-02-02', '2010-02-03', '2010-02-04', '2010-02-05',
'2010-02-08', '2010-02-09', '2010-02-10', '2010-02-11',
'2010-02-12', '2010-02-16']))
Run Code Online (Sandbox Code Playgroud)
我想在我的日期列表中显示该月的最后一天,即:“2010-01-29”和“2010-02-16”
更具体地说...
import pandas as pd
import numpy as np
df = pd.read_csv('/path/to/file/') # Load a dataframe with your file
df.index = df['my_date_field'] # set the dataframe index with your date
dfg = df.groupby(pd.TimeGrouper(freq='M')) # group by month / alternatively use MS for Month Start / referencing …Run Code Online (Sandbox Code Playgroud) 我有一个xarray具有以下维度的数据集:
Dimensions: (subject: 30, session: 5, time: 45000)
Coordinates:
* subject (subject) object '110' '112' '114' '117' ...
* session (session) object 'week1' 'week2' 'week3' ...
* time (time) timedelta64[ns] 00:00:00 00:00:00.040000 ...
Run Code Online (Sandbox Code Playgroud)
我想将每个试验(主题/会话组合)分成更小的时间段,例如分成 3 个段,每个段有 15000 个值,结果维度可能如下所示:
(subject: 30, session: 5, segment: 3, time: 15000)
Run Code Online (Sandbox Code Playgroud)
我已经搜索并尝试了很多东西但都没有成功,这怎么办?
我一直在尝试的一件事似乎很接近,就是创建一个新的 MultiIndex 并将其拆开。
segment_data = np.repeat(range(3),len(ds.time)//3)
segment = xr.Variable(dims='time',data=segment_data)
newtime_data = np.tile(ds.time[:len(ds.time)//3],3)
newtime = xr.Variable(dims='time',data=newtime_data)
dsr = ds.assign_coords(segment=segment,newtime=newtime)
dsr = dsr.set_index(segment='segment',newtime='newtime')
dsr = dsr.stack(fragment=['segment','newtime'])
Run Code Online (Sandbox Code Playgroud)
然而,最后一行需要大量内存,并且似乎创建了一个维度fragment: len(ds.time)**2,这似乎不正确。我也不确定在这之后我必须做什么(unstack('fragment')?)。
编辑:更多的尝试让我来到这里: …
我想按某个数据时间段过滤数据帧,如下代码所示。
df2 = df2['Dates'].between_time(pandas.to_datetime('5/13/2015 8:41'), pandas.to_datetime('5/13/2015 8:55'))[['Dates','Category']]
Run Code Online (Sandbox Code Playgroud)
但出现错误“TypeError:索引必须是 DatetimeIndex”这是数据帧

我尝试过
df2 = pandas.read_csv(path2,parse_dates=[0])
就像其他帖子的回复之一一样,但仍然遇到相同的错误。有谁知道这里发生了什么?
我有这样的字符串'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) 我正在尝试将假数据插入到该表中。它不能完全随机,因为行需要有意义。下面我来解释一下。
我的数据如下所示:
| 帐号 | 帐户状态 | 开始日期 | 结束日期 |
|---|---|---|---|
| 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 出现两次的例子:
| 帐号 … |
|---|
python-datetime ×10
pandas ×7
python ×7
dataframe ×1
date ×1
datetime ×1
django ×1
python-3.x ×1
xml-rpc ×1
xmlrpclib ×1