2016-11-02 2 views
2

2/29/2008 일에 하루를 줄이기 위해 날짜 수정 작업을 수행하는 코드를 작성했습니다. 코드가 성공적으로 실행되고 출력을 표시하지만 데이터 프레임을 업데이트하지 않습니다. 수정 된 값을 사용하여 파이썬에서 데이터 프레임 업데이트하기

Name Maint Start Date 
Yasin 02/29/08 
Susy 01/04/15 
James 04/14/06 

나는 그것이 나에게 출력을 준 다음 코드를 작성하지만

spend_sw[spend_sw['Maint Start Date'] == '02/29/2008'].apply(lambda x: pd.datetime(x['Maint Start Date'].year , x['Maint Start Date'].month, x['Maint Start Date'].day - 1), axis=1) 

그럼 내가가 수정 dataframe를 업데이트하지 않았습니다하지만 윤년 DAT를 가지고 있지 않은 모든 필드를 비워되었다 .

spend_sw['Maint Start Date'] = spend_sw[spend_sw['Maint Start Date'] == '02/29/2008'].apply(lambda x: pd.datetime(x['Maint Start Date'].year , x['Maint Start Date'].month, x['Maint Start Date'].day - 1), axis=1) 

기존 데이터 프레임의 값을 어떻게 수정할 수 있습니까?

답변

2

난 당신이 먼저 ix으로 필터링하고 Timedelta 어느 날 to_timedelta 만든 빼기, 열 Maint Start Dateto_datetime의 모든 값을 변환 할 수 있다고 생각 :

print (spend_sw) 
    Name Maint Start Date 
0 Yasin   02/29/08 
1 Susy   01/04/15 
2 James   04/14/06 

spend_sw['Maint Start Date'] = pd.to_datetime(spend_sw['Maint Start Date']) 

print (spend_sw.ix[spend_sw['Maint Start Date'] == '02/29/08', 'Maint Start Date']) 
0 2008-02-29 
Name: Maint Start Date, dtype: datetime64[ns] 

spend_sw.ix[spend_sw['Maint Start Date'] == '02/29/08', 'Maint Start Date'] = \ 
spend_sw.ix[spend_sw['Maint Start Date'] == '02/29/08', 'Maint Start Date'] - 
pd.to_timedelta(1, unit='d') 
print (spend_sw) 
    Name Maint Start Date 
0 Yasin  2008-02-28 
1 Susy  2015-01-04 
2 James  2006-04-14 

maskoffset 또 다른 솔루션 :

spend_sw['Maint Start Date'] = pd.to_datetime(spend_sw['Maint Start Date']) 

date = pd.to_datetime('02/29/08') 
date1 = date - pd.offsets.Day(1) 
#mask by condition 
ma = spend_sw['Maint Start Date'] == date 
spend_sw['Maint Start Date'] = spend_sw['Maint Start Date'].mask(ma, date1) 
print (spend_sw) 
    Name Maint Start Date 
0 Yasin  2008-02-28 
1 Susy  2015-01-04 
2 James  2006-04-14 
+0

안녕 ... 나는 해결책을 시도하고 완벽하게 잘 일했다. 또한 몇 년 동안 이름을 언급하는 데 더 많은 날짜 조작을해야만했고 정확하게 필요한 작업을 수행했습니다. –

+0

수락 해 주셔서 감사합니다! 행운을 빕니다! – jezrael

관련 문제