2017-11-22 6 views
1

팬더, 파이썬에 문제가 있습니다. 나는 날짜 문자열날짜 열을 변경하는 방법?

"2016-02-28" ABC123 
"2016-02-29" CDE345 
"2016-03-30" FGH567 
"2016-03-31" XYZ235 
... 

은 우리가 2월 두 가지 일, 28 일 및 29 나는 한 달 만 관심을 가지고 볼 다음은 다른 날짜에 여러 행을 가지고있다. 따라서,이 같은, 이러한 행은 같은 날 갖고 싶어 :

"2016-02-29" ABC123 
"2016-02-29" CDE345 
"2016-03-31" FGH567 
"2016-03-31" XYZ235 
... 

그것은 큰 문제가 아닙니다 그들이 얻을하는 일만큼이 같은 날하지만 바람직 마지막 날 때문이다. 나는자를 수없고 "2016-02"만 지킬 수 있습니다. 왜냐하면 나중에 나날을 필요로하기 때문입니다. 더 쉬워지면 타임 스탬프로 변환 할 수 있습니다. ,

df ["DATE"] = pandas.to_datetime (df ["DATE"]) 

(이 라인 대신 날짜의 타임 스탬프로 날짜 열을 변환 않는 이유 또 다른 질문은? 그것은 날짜로 변환 말한다, 대신에이 타임 스탬프?이된다) I 리샘플링 시도

그러나 아무 소용이 없습니다. 이전에 해본대로 문자열을 자르고 붙이면 수동으로이 작업을 수행하고 싶지 않습니다. 좀 더 우아한 해결책이 있어야합니까?

답변

2

사용 MonthEnd 오프셋 :

df["DATE"] = pd.to_datetime (df["DATE"]) + pd.offsets.MonthEnd(0) 
print (df) 
     DATE  COL 
0 2016-02-29 ABC123 
1 2016-02-29 CDE345 
2 2016-03-31 FGH567 
3 2016-03-31 XYZ235 

정말 큰 DataFrame 및 성능이 중요한 경우 :

df['DATE'] = pd.to_datetime(df["DATE"]).values.astype('datetime64[M]') + \ 
          np.array([1], dtype='timedelta64[M]') - \ 
          np.array([1], dtype='timedelta64[D]') 
print (df) 
     DATE  COL 
0 2016-02-29 ABC123 
1 2016-02-29 CDE345 
2 2016-03-31 FGH567 
3 2016-03-31 XYZ235 

가 (또 다른 질문은, 왜이 줄 에 DATE 열을 변환 않습니다 datetime 대신 timestamp ?? datetime으로 변환하지만, 대신 beco ? 당신이 문서 here를 참조하면 MES 타임 스탬프)

는 말한다 :

타임 스탬프는 파이썬의 날짜 시간의 팬더 해당하며 대부분의 경우에 상호 교환 입니다. DatetimeIndex를 구성하는 항목 및 팬더의 데이터 구조를 나타내는 데이터 형식에 사용되는 유형입니다.

+0

@Bharath를 사용하여이 - 감사합니다. – jezrael

0

또는 우리가 to_period

df.index=df.index.to_period('M').to_timestamp('M') 
df 
Out[16]: 
       A 
2016-02-29 ABC123 
2016-02-29 CDE345 
2016-03-31 FGH567 
2016-03-31 XYZ235 
+0

그러나 솔루션에 감사드립니다. 솔루션에서는 기간이 인덱스라고 가정합니다. 내 색인을 변경하고 싶지 않아 다른 문제를 더 잘 적용 할 수있는 다른 솔루션을 선택합니다. 어쨌든 고맙습니다! :) –