Python ValueError:Units';M';和';Y';不再支持,因为它们不表示明确的timedelta值持续时间

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

我最近将代码从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
以下是完整的代码:

将熊猫作为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_