如何更改pandas数据帧中的日期

时间:2016-10-14 09:18:27

标签: python pandas

我有如下的数据框

     day
0  2016-07-12
1  2016-08-13
2  2016-09-14
3  2016-10-15
4  2016-11-01

dtype:datetime64

我想改变下面的日子

     day
0  2016-07-01
1  2016-08-01
2  2016-09-01
3  2016-10-01
4  2016-11-01

我试过

df.day.dt.day=1

但它没有奏效 我该如何改造?

1 个答案:

答案 0 :(得分:2)

您可以使用numpy,先按values转换为numpy array,然后按astype转换为datetime64[M],最快的解决方案是什么:

df['day'] = df['day'].values.astype('datetime64[M]')
print (df)
         day
0 2016-07-01
1 2016-08-01
2 2016-09-01
3 2016-10-01
4 2016-11-01

另一个更慢的解决方案:

df['day'] = df['day'].map(lambda x: pd.datetime(x.year, x.month, 1))
print (df)
         day
0 2016-07-01
1 2016-08-01
2 2016-09-01
3 2016-10-01
4 2016-11-01

<强>计时

#[50000 rows x 1 columns]
df = pd.concat([df]*10000).reset_index(drop=True)

def f(df):
    df['day'] = df['day'].values.astype('datetime64[M]')
    return df

print (f(df))    

In [281]: %timeit (df['day'].map(lambda x: pd.datetime(x.year, x.month, 1)))
10 loops, best of 3: 160 ms per loop

In [282]: %timeit (f(df))
100 loops, best of 3: 4.38 ms per loop