2015-09-08 3 views
-1

Например, у меня есть следующий кадр данных:Как я могу изменить дату с начала месяца до конца месяца в dateframe в Python

index  0 
2000-03-01 4.03333 
2000-06-01 3.93333 
2000-09-01 4.0 
2000-12-01 3.9 
2001-03-01 4.23333 
2001-06-01 4.4 

индекс pandas.tseries. index.DatetimeIndex. И я хочу изменить индекс с начала месяца до конца месяца, скажем, 2000-03-01 до 2000-03-31 для всех индексов. Как я могу это достичь?

+0

Я пытался использовать функцию datetime.replace() заменить на следующий день. Но почему-то это не сработает. –

+1

рассмотрите вопрос о предоставлении минимального количества кода для других, чтобы изучить и устранить проблему, с которой вы сталкиваетесь ... –

+0

http://stackoverflow.com/help/how-to-ask –

ответ

1

Вы можете использовать tseries.offsets и использовать MonthEnd:

In [143]: 
from pandas.tseries.offsets import * 
df.index += MonthEnd() 
df 

Out[143]: 
        0 
index    
2000-03-31 4.03333 
2000-06-30 3.93333 
2000-09-30 4.00000 
2000-12-31 3.90000 
2001-03-31 4.23333 
2001-06-30 4.40000 
0

Здесь, как сдвинуть индекс до конца каждого месяца. Вы можете выбрать другую частоту, изменив параметр freq (см. Offset Aliases).

# Sample data 
df = pd.DataFrame({'0': [4.0333300000000003, 
    3.9333300000000002, 
    4.0, 
    3.8999999999999999, 
    4.2333300000000005, 
    4.4000000000000004]}, 
index = pd.to_datetime(['2000-03-01', 
    '2000-06-01', 
    '2000-09-01', 
    '2000-12-01', 
    '2001-03-01', 
    '2001-06-01'])) 

# Shifting 
df.shift(periods=1, freq='M') 

        0 
2000-03-31 4.03333 
2000-06-30 3.93333 
2000-09-30 4.00000 
2000-12-31 3.90000 
2001-03-31 4.23333 
2001-06-30 4.40000 
+0

2000-09-29, это проблема, она должна быть 2000-09-30 –

+0

Я обновляю свой ответ. Теперь это правильно с частотой 'M'. – Romain

Смежные вопросы