Python ValueError:Units';M';和';Y';不再支持,因为它们不表示明确的timedelta值持续时间
我最近将代码从Python 3.3升级到了Python 3.7,它当前抛出了一个错误,它说: ValueError:不再支持单位“M”和“Y”,因为它们不代表明确的时间增量值持续时间 这是令人费解的,因为代码在升级之前运行良好 下面是代码中有问题的部分:Python ValueError:Units';M';和';Y';不再支持,因为它们不表示明确的timedelta值持续时间,python,python-3.x,pandas,Python,Python 3.x,Pandas,我最近将代码从Python 3.3升级到了Python 3.7,它当前抛出了一个错误,它说: ValueError:不再支持单位“M”和“Y”,因为它们不代表明确的时间增量值持续时间 这是令人费解的,因为代码在升级之前运行良好 下面是代码中有问题的部分: df['date\u modified']=(df['date\u variable']-pd.to\u timedelta(df['years\u variable'],unit='Y')).dt.date 以下是完整的代码: 将熊猫作为p
df['date\u modified']=(df['date\u variable']-pd.to\u timedelta(df['years\u variable'],unit='Y')).dt.date
以下是完整的代码:
将熊猫作为pd导入
将numpy作为np导入
idx=[np.数组(['Jan-18','Jan-18','Feb-18','Mar-18','Mar-18','Mar-18','Mar-18','Apr-18','May-18','Jun-18','Jun-18','Jun-18','Jul-18','Aug-18','Sep-18','Sep-18','Oct-18','Oct-18','Nov-18','Dec-18',]),np数组([‘A’、‘B’、‘B’、‘A’、‘B’、‘C’、‘A’、‘B’、‘C’、‘A’、‘B’、‘C’、‘A’、‘B’、‘C’、‘A’、‘B’、‘C’)]
数据=[{'years\'u variable':1},{'years\'u variable':5},{'years\'u variable':3},{'years\'u variable':1},{'years\'u variable':6},{'years\'u variable':3},{'years\'u variable':5},{'years\'u variable':2},{'years\'variable':3},{'years\'years\'u variable':3},{'years\',{'years_variable':2},{'years_variable':7},{'years_variable':3},{'years_variable':6},{'years_variable':8},{'years_variable':2},{'years_variable':7},{'years_variable':9}]
df=pd.DataFrame(数据,索引=idx,列=['years\u variable'])
index.names=['date\u variable','type']
df=df.reset_index()
df['date_variable']=pd.to_datetime(df['date_variable'],格式='%b-%y')#http://strftime.org/
df=df.set_索引(['date_variable','type'])
df=df.reset_index()
打印(df)
df['date\u modified']=(df['date\u variable']-pd.to\u timedelta(df['years\u variable'],unit='Y')).dt.date
这不是Python的问题,而是与熊猫有关的问题
在版本0.25.0中,库不再支持在timedelta函数中使用单位“M”
(月)“Y”
(年)
这特别影响熊猫.to_timedelta()、pandas.timedelta()
和pandas.TimedeltaIndex()
您可以用它们的等效天数来指定它们
您将不得不重写代码,以利用几天而不是几年(和几个月)
这是到的链接,这是到的链接
更新:下面是对代码的最新修改 这对原始代码的更改比其后面的代码块少:
将熊猫作为pd导入
将numpy作为np导入
idx=[np.数组(['Jan-18','Jan-18','Feb-18','Mar-18','Mar-18','Mar-18','Mar-18','Apr-18','May-18','Jun-18','Jun-18','Jun-18','Jul-18','Aug-18','Sep-18','Sep-18','Oct-18','Oct-18','Nov-18','Dec-18',]),np数组([‘A’、‘B’、‘B’、‘A’、‘B’、‘C’、‘A’、‘B’、‘C’、‘A’、‘B’、‘C’、‘A’、‘B’、‘C’、‘A’、‘B’、‘C’)]
数据=[{'years\'u variable':1},{'years\'u variable':5},{'years\'u variable':3},{'years\'u variable':1},{'years\'u variable':6},{'years\'u variable':3},{'years\'u variable':5},{'years\'u variable':2},{'years\'variable':3},{'years\'years\'u variable':3},{'years\',{'years_variable':2},{'years_variable':7},{'years_variable':3},{'years_variable':6},{'years_variable':8},{'years_variable':2},{'years_variable':7},{'years_variable':9}]
df=pd.DataFrame(数据,索引=idx,列=['years\u variable'])
index.names=['date\u variable','type']
df=df.reset_index()
df['date_variable']=pd.to_datetime(df['date_variable'],格式='%b-%y')#http://strftime.org/
df=df.set_索引(['date_variable','type'])
df=df.reset_index()
#这就是我们所接触到的一切
#将“年份变量”列下的值乘以365
#获取天数
#使用时间增量中的“D”单位,表示它实际上是以天为单位的
df['date\u modified']=(df['date\u variable']-pd.to\u timedelta(df['years\u variable']*365,单位='D')).dt.date
打印(df)
输出
date_variable type years_variable date_modified
0 2018-01-01 A 1 2017-01-01
1 2018-01-01 B 5 2013-01-02
2 2018-02-01 B 3 2015-02-02
3 2018-03-01 A 2 2016-03-01
4 2018-03-01 B 7 2011-03-03
5 2018-03-01 C 3 2015-03-02
6 2018-04-01 A 1 2017-04-01
7 2018-04-01 B 6 2012-04-02
8 2018-05-01 B 3 2015-05-02
9 2018-06-01 A 5 2013-06-02
10 2018-06-01 B 2 2016-06-01
11 2018-06-01 C 3 2015-06-02
12 2018-07-01 A 1 2017-07-01
13 2018-08-01 B 9 2009-08-03
14 2018-08-01 C 3 2015-08-02
15 2018-09-01 A 2 2016-09-01
16 2018-09-01 B 7 2011-09-03
17 2018-10-01 C 3 2015-10-02
18 2018-10-01 A 6 2012-10-02
19 2018-10-01 B 8 2010-10-03
20 2018-11-01 A 2 2016-11-01
21 2018-12-01 B 7 2011-12-03
22 2018-12-01 C 9 2009-12-03
这里是对您的代码的一个较旧的修改,它可能适合您 你应该完全忽略它。我只是出于历史目的保留它
将熊猫作为pd导入
将numpy作为np导入
idx=[np.数组(['Jan-18','Jan-18','Feb-18','Mar-18','Mar-18','Mar-18','Mar-18','Apr-18','May-18','Jun-18','Jun-18','Jun-18','Jul-18','Aug-18','Sep-18','Sep-18','Oct-18','Oct-18','Nov-18','Dec-18',]),np数组([‘A’、‘B’、‘B’、‘A’、‘B’、‘C’、‘A’、‘B’、‘C’、‘A’、‘B’、‘C’、‘A’、‘B’、‘C’、‘A’、‘B’、‘C’)]
#将内部目录的值从年转换为天
#因为我们将在'timedelta'函数中指定'D'单位
#与我们以前使用的现在不推荐使用的“Y”单位不同
数据=[{'years'u variable':365},{'years'u variable':1825},{'years'u variable':1095},{'years'u variable':2555},{'years'u variable':1095},{'years'u variable':2190},{'years'u variable':1095},{'years'years'u variable':1825},{'years'u variable':730},{'years'u':1095},{'years'u':365},{'years'u variable:3285},{'years'u variable:1095},{'years'u variable:730},{'years'u variable:2555},{'years'u variable:1095},{'years'u variable:2190},{'years'u variable:2920},{'years'u variable:730},{'years'u variable:2555},{'years'u variable:3285}]
df=pd.DataFrame(数据,索引=idx,列=['years\u variable'])
index.names=['date\u variable','type']
df=df.reset_index()
df['date_variable']=pd.to_datetime(df['date_variable'],格式='%b-%y')#http://strftime.org/
df=df.set_