[python] 날짜별로 Pandas 데이터 프레임 정렬

다음과 같이 팬더 데이터 프레임이 있습니다.

Symbol  Date
A       02/20/2015
A       01/15/2016
A       08/21/2015

나는 그것을 기준으로 정렬하고 Date싶지만 열은 단지 object.

열을 날짜 개체로 만들려고했지만 해당 형식이 필요한 형식이 아닌 문제가 발생했습니다. 필요한 형식은 2015-02-20,등 입니다 .

이제 저는 numpy가 ‘미국식’날짜를 ISO 표준으로 변환하여 날짜 개체를 만들어 정렬 할 수 있도록하는 방법을 알아 내려고합니다.

이 미국 날짜를 ISO 표준으로 어떻게 변환합니까? 아니면 pandas에서 빠진 더 간단한 방법이 있습니까?



답변

를 사용 pd.to_datetime()하여 datetime 객체로 변환 할 수 있습니다 . 형식 매개 변수를 사용하지만 귀하의 경우에는 필요하지 않다고 생각합니다.

>>> import pandas as pd
>>> df = pd.DataFrame( {'Symbol':['A','A','A'] ,
    'Date':['02/20/2015','01/15/2016','08/21/2015']})
>>> df
         Date Symbol
0  02/20/2015      A
1  01/15/2016      A
2  08/21/2015      A
>>> df['Date'] =pd.to_datetime(df.Date)
>>> df.sort('Date') # This now sorts in date order
        Date Symbol
0 2015-02-20      A
2 2015-08-21      A
1 2016-01-15      A

향후 검색을 위해 정렬 문을 변경할 수 있습니다.

>>> df.sort_values(by='Date') # This now sorts in date order
        Date Symbol
0 2015-02-20      A
2 2015-08-21      A
1 2016-01-15      A


답변

sort방법은있다 되지 및 교체 sort_values. 다음을 사용하여 datetime 객체로 변환 한 후df['Date']=pd.to_datetime(df['Date'])

df.sort_values(by=['Date'])

참고 : 내부 및 / 또는 내림차순 (가장 최근 순서) 으로 정렬하려면 :

df.sort_values(by=['Date'], inplace=True, ascending=False)


답변

@JAB의 대답 은 빠르고 간결합니다. 그러나 그것은 DataFrame당신이 원할 수도 있고 원하지 않을 수도있는 정렬하려는 것을 변경합니다 .

( 참고 : 날짜 열은 문자열이 아닌 날짜 여야하기 때문에 거의 확실 하게 원할 것 입니다 !)

날짜를 날짜로 변경하고 싶지 않은 경우에는 다른 방법으로 수행 할 수도 있습니다.

먼저 정렬 된 Date열 에서 색인을 가져옵니다 .

In [25]: pd.to_datetime(df.Date).order().index
Out[25]: Int64Index([0, 2, 1], dtype='int64')

그런 다음 원본을 색인화하는 데 사용하고 DataFrame그대로 둡니다.

In [26]: df.ix[pd.to_datetime(df.Date).order().index]
Out[26]:
        Date Symbol
0 2015-02-20      A
2 2015-08-21      A
1 2016-01-15      A

마법!

참고 : Pandas 버전 0.20.0 이상의 경우 이제 더 이상 사용되지 않는 loc대신을 사용 ix하세요.


답변

날짜 열이 포함 된 데이터는 아래 코드를 사용하여 읽을 수 있습니다.

data = pd.csv(file_path,parse_dates=[date_column])

위의 코드 줄을 사용하여 데이터를 읽으면 다음과 같이 날짜에 대한 정보가 포함 된 열에 액세스 할 수 있습니다 pd.date_time().

pd.date_time(data[date_column], format = '%d/%m/%y')

요구 사항에 따라 날짜 형식을 변경합니다.


답변