2017-01-16 8 views
3

열 이름이 문자열 형식의 날짜 (년 - 월) 인 데이터 프레임이 있습니다. 이 이름을 datetime 형식으로 변환하려면 어떻게해야합니까?데이터 형식 열 이름을 문자열 형식에서 datetime으로 변경

new_cols = pd.to_datetime(df.columns) 
df = df[new_cols] 

을하지만 오류 얻을 : 나는이 일을 시도

KeyError: "DatetimeIndex(
['2000-01-01', '2000-02-01', 
'2000-03-01', '2000-04-01', 
'2000-05-01', '2000-06-01', 
'2000-07-01', '2000-08-01',    
'2000-09-01', '2000-10-01', 
'2015-11-01', '2015-12-01', 
'2016-01-01', '2016-02-01', 
'2016-03-01', '2016-04-01', 
'2016-05-01', '2016-06-01', 
'2016-07-01', '2016-08-01'], 
dtype='datetime64[ns]', length=200, freq=None) not in index" 

감사합니다!

답변

7

loc에 의해 선택되는 경우 값이 변경되지 않으므로 KeyError을 가져옵니다.

그래서 당신은 columns 출력을 지정해야합니다

df.columns = pd.to_datetime(df.columns) 

샘플 :

cols = ['2000-01-01', '2000-02-01', '2000-03-01', '2000-04-01', '2000-05-01'] 
vals = np.arange(5) 
df = pd.DataFrame(columns = cols, data=[vals]) 
print (df) 
    2000-01-01 2000-02-01 2000-03-01 2000-04-01 2000-05-01 
0   0   1   2   3   4 

print (df.columns) 
Index(['2000-01-01', '2000-02-01', '2000-03-01', '2000-04-01', '2000-05-01'], dtype='object') 

df.columns = pd.to_datetime(df.columns) 

print (df.columns) 
DatetimeIndex(['2000-01-01', '2000-02-01', '2000-03-01', '2000-04-01', 
       '2000-05-01'], 
       dtype='datetime64[ns]', freq=None) 

또한까지 가능한 변환입니다 :

print (df.columns) 
Index(['2000-01-01', '2000-02-01', '2000-03-01', '2000-04-01', '2000-05-01'], dtype='object') 

df.columns = pd.to_datetime(df.columns).to_period('M') 

print (df.columns) 
PeriodIndex(['2000-01', '2000-02', '2000-03', '2000-04', '2000-05'], 
      dtype='period[M]', freq='M') 
1

확장으로 jezrael의 대답은 원래 코드는 new_cols 및 s에 저장된 배열을 사용하여 df 배열을 조각화하려고합니다. 결과는 df로 찢어 지지만 그 값은 df에 존재하지 않기 때문에 아직 조각화 할 인덱스를 찾을 수 없다는 오류를 반환합니다.

jezrael의 대답처럼 열의 이름을 변경한다고 선언해야합니다.