Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.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_Pandas_Dataframe_Python Datetime - Fatal编程技术网

Python 使用日期范围替换日期

Python 使用日期范围替换日期,python,pandas,dataframe,python-datetime,Python,Pandas,Dataframe,Python Datetime,我有一个数据框,它有两列:日期和传递者的数量。“日期”列的日期范围为1950年至2019年。然而,有些日期被记录为1600,这显然是一个错误。当我尝试将date对象更改为datetimeindex时,我得到一个越界错误,这是有意义的。所以我决定先用nan值替换1600个日期 new_set=drop_dup.replace(to_replace =["1610-01-01", "1610/01/01"], value = np.nan) 这只是将date对象更改为d

我有一个数据框,它有两列:日期和传递者的数量。“日期”列的日期范围为1950年至2019年。然而,有些日期被记录为1600,这显然是一个错误。当我尝试将date对象更改为datetimeindex时,我得到一个越界错误,这是有意义的。所以我决定先用nan值替换1600个日期

new_set=drop_dup.replace(to_replace =["1610-01-01", "1610/01/01"], 
             value = np.nan)
这只是将date对象更改为datetimeindex的临时修复程序。值为1600的日期约为27,我不想将其更改为单个值。相反,我想用一个特定的日期范围,即从1955年到1982年,来替换那些nan值。下面的代码不起作用,但我的目标是类似的东西

new_set=drop_dup.replace(to_replace =np.nan, value = pd.date_range(start='1-1-1955', end='1-1-1982', freq='12M')
因此,27 1600个日期的范围应为1955年至1982年的样本数据:

df = pd.DataFrame({'date': pd.to_datetime([np.nan] * 10 + 
                                          ['2000-01-31','2001-01-31','2002-01-31'])})
print (df)
         date
0         NaT
1         NaT
2         NaT
3         NaT
4         NaT
5         NaT
6         NaT
7         NaT
8         NaT
9         NaT
10 2000-01-31
11 2001-01-31
12 2002-01-31
第一个想法是为缺失的数据创建掩码,并附加
date\u range
,不带结束参数,但按
sum
创建的缺失值的数量添加
period

m = df['date'].isna()
df.loc[m, 'date'] = pd.date_range(start='1-1-1955', freq='12M', periods=m.sum())
print (df)
         date
0  1955-01-31
1  1956-01-31
2  1957-01-31
3  1958-01-31
4  1959-01-31
5  1960-01-31
6  1961-01-31
7  1962-01-31
8  1963-01-31
9  1964-01-31
10 2000-01-31
11 2001-01-31
12 2002-01-31
另一个想法是删除
开始
,并在参数
结束
中添加最小日期和期间,以及缺失值的计数:

m = df['date'].isna()
df.loc[m, 'date'] = pd.date_range(end=df['date'].min(), freq='12M', periods=m.sum())
print (df)
         date
0  1991-01-31
1  1992-01-31
2  1993-01-31
3  1994-01-31
4  1995-01-31
5  1996-01-31
6  1997-01-31
7  1998-01-31
8  1999-01-31
9  2000-01-31
10 2000-01-31
11 2001-01-31
12 2002-01-31
样本数据:

df = pd.DataFrame({'date': pd.to_datetime([np.nan] * 10 + 
                                          ['2000-01-31','2001-01-31','2002-01-31'])})
print (df)
         date
0         NaT
1         NaT
2         NaT
3         NaT
4         NaT
5         NaT
6         NaT
7         NaT
8         NaT
9         NaT
10 2000-01-31
11 2001-01-31
12 2002-01-31
第一个想法是为缺失的数据创建掩码,并附加
date\u range
,不带结束参数,但按
sum
创建的缺失值的数量添加
period

m = df['date'].isna()
df.loc[m, 'date'] = pd.date_range(start='1-1-1955', freq='12M', periods=m.sum())
print (df)
         date
0  1955-01-31
1  1956-01-31
2  1957-01-31
3  1958-01-31
4  1959-01-31
5  1960-01-31
6  1961-01-31
7  1962-01-31
8  1963-01-31
9  1964-01-31
10 2000-01-31
11 2001-01-31
12 2002-01-31
另一个想法是删除
开始
,并在参数
结束
中添加最小日期和期间,以及缺失值的计数:

m = df['date'].isna()
df.loc[m, 'date'] = pd.date_range(end=df['date'].min(), freq='12M', periods=m.sum())
print (df)
         date
0  1991-01-31
1  1992-01-31
2  1993-01-31
3  1994-01-31
4  1995-01-31
5  1996-01-31
6  1997-01-31
7  1998-01-31
8  1999-01-31
9  2000-01-31
10 2000-01-31
11 2001-01-31
12 2002-01-31

我尝试了上面的方法,但是我一直得到一个类型错误“series”对象callable@Tamarie-你的解决方案是如何改变的?它刚刚起作用,结果我错过了总和()在结尾处,我尝试了上述操作,但始终得到一个类型错误“series”object notcallable@Tamarie-你的解决方案是如何改变的?它只是起作用了,结果我错过了最后的sum()