2016-10-14 2 views
1

У меня есть dataframe, как показано нижеКак изменить дату в панд dataframe

 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 

, но оно не хорошо работать Как я могу преобразовать?

ответ

2

Вы можете использовать numpy, сначала преобразовать в numpy array по values, а затем преобразовать в datetime64[M] по astype, что является самым быстрым решением:

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 

Другой slowier решение:

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 
Смежные вопросы