Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从年到月和周的日期偏移_Python_Date_Datetime_Pandas_Dataframe - Fatal编程技术网

Python 从年到月和周的日期偏移

Python 从年到月和周的日期偏移,python,date,datetime,pandas,dataframe,Python,Date,Datetime,Pandas,Dataframe,我在一段时间内提取一大块数据。它是从列recvd_dttm中提取日期和时间。它需要从一年前开始的所有数据。我想修改它,使它可以拉一个月或一天,但是pd.DateOffset(months=1)给出了一个KeyError:1错误。如果我将其更改为天=7,则会得到相同的错误。但如果年数=1,它就可以正常工作。这是怎么回事 df = pd.read_csv('MYDATA.csv') # filter by countries with at least one medal and sort df[

我在一段时间内提取一大块数据。它是从列recvd_dttm中提取日期和时间。它需要从一年前开始的所有数据。我想修改它,使它可以拉一个月或一天,但是pd.DateOffset(months=1)给出了一个
KeyError:1
错误。如果我将其更改为天=7,则会得到相同的错误。但如果年数=1,它就可以正常工作。这是怎么回事

df = pd.read_csv('MYDATA.csv')

# filter by countries with at least one medal and sort
df['recvd_dttm'] = pd.to_datetime(df['recvd_dttm'])

#Only retrieve data before now (ignore typos that are future dates)
mask = df['recvd_dttm'] <= datetime.datetime.now()
df = df.loc[mask]
# get first and last datetime for final week of data

range_max = df['recvd_dttm'].max()
range_min = range_max - pd.DateOffset(years=1)

# take slice with final week of data
df = df[(df['recvd_dttm'] >= range_min) & 
               (df['recvd_dttm'] <= range_max)]
df=pd.read\u csv('MYDATA.csv'))
#按至少拥有一枚奖牌和一种奖牌的国家筛选
df['recvd_dttm']=pd.to_datetime(df['recvd_dttm']))
#仅在现在之前检索数据(忽略未来日期的打字错误)
遮罩=测向['recvd\U dttm']=距离(最小值)&

(df['recvd_dttm']尝试使用timedelta而不是DateOffset

您是否尝试更明确地说明pd.DateOffset的作用

例如:

range_max = df['recvd_dttm'].max()
range_min = range_max - (df['recvd_dttm']+pd.DateOffset(years=1))

然后替换月份值和日期值。

< P>你是否考虑使用UNIX EPOCH时间而不是以较少的方式格式化的日期?有一个很好的文档,并且处理这个问题中的偏移量似乎更容易,因为滑动范围更容易用一个或多或少连续的实数序列来实现。ric值。

您可以使用
pd.tseries.offset
中的偏移族。下面是示例代码

import pandas as pd
import datetime

# your data
# ================================
df = pd.read_csv('/home/Jian/Downloads/MOCK_DATA.csv', usecols=[1, 4])

df['recvd_dttm'] = pd.to_datetime(df['recvd_dttm'])
mask = df['recvd_dttm'] <= datetime.datetime.now()
df = df.loc[mask]


# flexible offsets
# =======================================
print(range_max)

2015-07-14 16:52:58

# for 1 month: currently there is a bug
# range_min_month = range_max - pd.tseries.offsets.MonthOffset(1)

# for 1 week
range_min_week = range_max - pd.tseries.offsets.Week(1)
print(range_min_week)

2015-07-07 16:52:58

# for 5 days
range_min_day = range_max - pd.tseries.offsets.Day(5)
print(range_min_day)

2015-07-09 16:52:58
将熊猫作为pd导入
导入日期时间
#你的数据
# ================================
df=pd.read_csv('/home/Jian/Downloads/MOCK_DATA.csv',usecols=[1,4])
df['recvd_dttm']=pd.to_datetime(df['recvd_dttm']))

mask=df['recvd_dttm']我应该已经尝试过了。我不想在一个月内做timedelta(days=30)或任何事情,因为它在某些月份是不准确的。如果我尝试months=1,我会得到TypeError:'months'是这个函数的无效关键字参数。years=1的问题是pd.DateOffset(years=1)工作正常。替换月份和天数会导致错误。根据您的建议,我得到了错误类型错误:无法在datetime/timedelta操作中使用非绝对DateOffset[]我的语法错了吗?嗯,你能提供一行数据给我玩吗?我有一个示例栏给你。希望能有帮助!对于你的示例栏,我可以毫无问题地使用你的原始代码。日子和月份都在工作。这可能是一个数据问题吗?哇,是的,这是一个数据问题。感谢你帮助我认识到这一点。原始的code在那一年中会以月为单位运行,但很明显,如果您使用一个月的代码,则没有可用的一月。我现在必须进行这方面的工作,谢谢!您能否澄清您的最终目的是什么?是为了获得每年的最大值吗?不是。最终目的是从用户输入的特定范围中获取数据片段。他们选择一天、一个月,一年后,它从csv中提取了那么多的数据。那么range_max和range_min行呢?你希望它们能完成什么?它们只是所选范围的开始和结束吗?谢谢你,简讯!我实际上意识到这个问题相当愚蠢,因为这个问题在代码的其他地方。