다음 열이있는 데이터 프레임 df가 있습니다.
df['ArrivalDate'] =
...
936 2012-12-31
938 2012-12-29
965 2012-12-31
966 2012-12-31
967 2012-12-31
968 2012-12-31
969 2012-12-31
970 2012-12-29
971 2012-12-31
972 2012-12-29
973 2012-12-29
...
열의 요소는 pandas.tslib.Timestamp입니다.
연도와 월만 포함하고 싶습니다. 나는 그것을 할 수있는 간단한 방법이있을 것이라고 생각했지만 이해할 수는 없습니다.
내가 시도한 것은 다음과 같습니다.
df['ArrivalDate'].resample('M', how = 'mean')
다음과 같은 오류가 발생했습니다.
Only valid with DatetimeIndex or PeriodIndex
그런 다음 시도했습니다.
df['ArrivalDate'].apply(lambda(x):x[:-2])
다음과 같은 오류가 발생했습니다.
'Timestamp' object has no attribute '__getitem__'
어떤 제안?
편집 : 나는 그것을 알아 냈습니다.
df.index = df['ArrivalDate']
그런 다음 인덱스를 사용하여 다른 열을 다시 샘플링 할 수 있습니다.
그러나 여전히 전체 열을 재구성하는 방법을 원합니다. 어떤 아이디어?
답변
연도 및 월을 별도로 표시하는 새 열을 원할 경우 다음을 수행 할 수 있습니다.
df['year'] = pd.DatetimeIndex(df['ArrivalDate']).year
df['month'] = pd.DatetimeIndex(df['ArrivalDate']).month
또는…
df['year'] = df['ArrivalDate'].dt.year
df['month'] = df['ArrivalDate'].dt.month
그런 다음 그대로 사용하거나 그대로 사용할 수 있습니다.
답변
가장 좋은 방법은 발견 !
은 df['date_column']
날짜 시간 형식이어야한다.
df['month_year'] = df['date_column'].dt.to_period('M')
다른 샘플링 간격에 D
대해 Day, 2M
2 개월 등을 사용할 수도 있고 타임 스탬프가있는 시계열 데이터가있는 경우 45Min
45 분, 15Min
15 분 샘플링 등의 세부 샘플링 간격으로 갈 수 있습니다 .
답변
year
및 month
속성에 직접 액세스 하거나 다음을 요청할 수 있습니다 datetime.datetime
.
In [15]: t = pandas.tslib.Timestamp.now()
In [16]: t
Out[16]: Timestamp('2014-08-05 14:49:39.643701', tz=None)
In [17]: t.to_pydatetime() #datetime method is deprecated
Out[17]: datetime.datetime(2014, 8, 5, 14, 49, 39, 643701)
In [18]: t.day
Out[18]: 5
In [19]: t.month
Out[19]: 8
In [20]: t.year
Out[20]: 2014
연도와 월을 결합하는 한 가지 방법은 다음과 같이 정수를 인코딩하는 것입니다 201408
. 2014 년 8 월의 경우 전체 열을 따라 다음과 같이 할 수 있습니다.
df['YearMonth'] = df['ArrivalDate'].map(lambda x: 100*x.year + x.month)
또는 그의 많은 변형.
그래도 날짜 조정 및 산술이 나중에 고통스럽고 특히 동일한 규칙없이 코드 또는 데이터를 사용하는 다른 사람들에게 고통 스럽기 때문에 나는 이것을하는 데 큰 팬이 아닙니다. 더 나은 방법은 미국의 휴일이 아닌 요일 또는 첫날과 같은 월별 규칙을 선택하고 선택한 날짜 규칙을 사용하여 날짜 / 시간 형식으로 데이터를 남겨 두는 것입니다.
이 calendar
모듈은 마지막 요일과 같은 특정 요일의 숫자 값을 얻는 데 유용합니다. 그런 다음 다음과 같은 작업을 수행 할 수 있습니다.
import calendar
import datetime
df['AdjustedDateToEndOfMonth'] = df['ArrivalDate'].map(
lambda x: datetime.datetime(
x.year,
x.month,
max(calendar.monthcalendar(x.year, x.month)[-1][:5])
)
)
datetime 열을 문자열로 표현하는 간단한 문제를 해결하는 방법을 찾고 있다면 다음 과 같이 클래스 의 strftime
함수를 사용할 수 있습니다 datetime.datetime
.
In [5]: df
Out[5]:
date_time
0 2014-10-17 22:00:03
In [6]: df.date_time
Out[6]:
0 2014-10-17 22:00:03
Name: date_time, dtype: datetime64[ns]
In [7]: df.date_time.map(lambda x: x.strftime('%Y-%m-%d'))
Out[7]:
0 2014-10-17
Name: date_time, dtype: object
답변
당신이 달 년 독특한 쌍을 원한다면, apply를 사용하는 것이 매우 매끄 럽습니다.
df['mnth_yr'] = df['date_column'].apply(lambda x: x.strftime('%B-%Y'))
한 열에 월-년을 출력합니다.
먼저 형식을 날짜-시간으로 변경하는 것을 잊지 마십시오. 일반적으로 잊어 버립니다.
df['date_column'] = pd.to_datetime(df['date_column'])
답변
[ ‘2018-03-04’]에서 연도 추출
df['Year'] = pd.DatetimeIndex(df['date']).year
df [ ‘Year’]는 새로운 열을 만듭니다. 월을 추출하려면 .month를 사용하십시오.
답변
먼저 pandas.to_datetime으로 날짜 문자열을 변환 하면 모든 numpy 날짜 시간 및 timedelta 기능 에 액세스 할 수 있습니다. 예를 들면 다음과 같습니다.
df['ArrivalDate'] = pandas.to_datetime(df['ArrivalDate'])
df['Month'] = df['ArrivalDate'].values.astype('datetime64[M]')
답변
jaknap32 덕분에 Year와 Month에 따라 결과를 집계하고 싶었습니다.
df_join['YearMonth'] = df_join['timestamp'].apply(lambda x:x.strftime('%Y%m'))
깔끔한 출력 :
0 201108
1 201108
2 201108