datetime64 [ns]列中日期之间的30天距离

时间:2019-03-12 15:56:27

标签: python pandas dataframe

我具有以下形式的数据:

6460  2001-07-24 00:00:00    67.5      75.1   75.9   71.0   75.2    81.8
6490  2001-06-24 00:00:00    68.4      74.9   76.1   70.9   75.5    82.7
6520  2001-05-25 00:00:00    69.6      74.7   76.3   70.8   75.5    83.2
6550  2001-04-25 00:00:00    69.2      74.6   76.1   70.6   75.0    83.1
6580  2001-03-26 00:00:00    69.1      74.4   75.9   70.5   74.3    82.8
6610  2001-02-24 00:00:00    69.0      74.0   75.3   69.8   73.8    81.9
6640  2001-01-25 00:00:00    68.9      73.9   74.6   69.7   73.5    80.0
6670  2000-12-26 00:00:00    69.0      73.5   75.0   69.5   72.6    81.8
6700  2000-11-26 00:00:00    69.8      73.2   75.1   69.5   72.0    82.7
6730  2000-10-27 00:00:00    70.3      73.1   75.0   69.4   71.3    82.6
6760  2000-09-27 00:00:00    69.4      73.0   74.8   69.4   71.0    82.3
6790  2000-08-28 00:00:00    69.6      72.8   74.6   69.2   70.7    81.9
6820  2000-07-29 00:00:00    67.8      72.9   74.4   69.1   70.6    81.8

我希望所有日期之间都相差30天。我知道如何使用类似的方式将特定的日期或月份添加到datetime对象中

ndfd = ndf['Date'].astype('datetime64[ns]')
ndfd = ndfd.apply(lambda dt: dt.replace(day=15))

但是,这没有考虑到月份之间的天数差异。

假设我可以更改同一天的日期,那么如何确保数据在每个月中的每一天都保持一致?

3 个答案:

答案 0 :(得分:2)

您可以使用date_range

df['date'] = pd.date_range(start=df['date'][0], periods=len(df), freq='30D')

答案 1 :(得分:1)

IIUC,您可以这样更改日期列:

import datetime

a = df.iloc[0,0]  # first date, assuming date col is first 
df['date'] = [a + datetime.timedelta(days=30 * i) for i in range(len(df))]

答案 2 :(得分:0)

我还没有测试过,所以不确定它是否可以像我认为的那样平滑运行。)

您可以将第一天转换为序数,向其添加30 * i,然后再转换回。

first_day=df.iloc[0]['date_column'].toordinal()
df['date']=(first_day+30*i for i in range(len(df))).fromordinal