我正在尝试替换日期大于特定日期的特定列中的所有DateTime值。
df
的示例如下所示。
date
2016-01-03
2016-01-03
2016-01-03
2016-01-02
2016-01-02
2016-01-02
2016-01-01
2016-01-01
2015-12-31
2015-12-31
2015-12-31
我希望所有大于2016-01-01
的日期都显示为2016-01-01
。
我期望的预期输出如下所示。
date
2016-01-01
2016-01-01
2016-01-01
2016-01-01
2016-01-01
2016-01-01
2016-01-01
2016-01-01
2015-12-31
2015-12-31
2015-12-31
任何人都可以提供的任何帮助将不胜感激。
答案 0 :(得分:3)
将Series.clip
与日期时间一起使用-例如与Timestamp
:
#if necessary
#df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].clip(upper=pd.Timestamp('2016-01-01'))
print (df)
date
0 2016-01-01
1 2016-01-01
2 2016-01-01
3 2016-01-01
4 2016-01-01
5 2016-01-01
6 2016-01-01
7 2016-01-01
8 2015-12-31
9 2015-12-31
10 2015-12-31
答案 1 :(得分:2)
我将执行mask
,只有clip
和mask
之间的区别在于,当替换值与边界值相同时,clip
更好,但是当有不同的替换价值面膜可以做得更好。
df.date.mask(df.date.gt('2016-01-01'),pd.Timestamp('2016-01-01'),inplace=True)
df
Out[397]:
date
0 2016-01-01
1 2016-01-01
2 2016-01-01
3 2016-01-01
4 2016-01-01
5 2016-01-01
6 2016-01-01
7 2016-01-01
8 2015-12-31
9 2015-12-31
10 2015-12-31