gpt4 book ai didi

python - 使用日期范围替换 nan 日期

转载 作者:太空宇宙 更新时间:2023-11-03 19:43:26 25 4
gpt4 key购买 nike

我有一个数据框,有两个列:日期和通行人数。日期列的日期范围是从 1950 年到 2019 年。但是,有些日期记录为 1600,这绝对是一个错误。当我尝试将日期对象更改为 datetimeindex 时,出现越界错误,这是有道理的。所以我决定首先用 nan 值替换 1600 个日期

new_set=drop_dup.replace(to_replace =["1610-01-01", "1610/01/01"], 
value = np.nan)

这只是将日期对象更改为 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_range,但使用 periodsum 创建的缺失值的数量:

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

另一个想法是删除 start 并向参数 end 添加最小日期,并在周期中添加缺失值的计数:

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

关于python - 使用日期范围替换 nan 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60295209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com