2017-09-19 3 views
0

나는 팬더에서 날짜를 정렬하는 데 어려움을 겪고 있지만 시계열로 놀고 있습니다. 궁극적으로 나는 여러 개의 시계열 (각각 별도의 csv 파일에 있음)에 참여할 수 있기를 원하지만 날짜 인덱스의 불일치로 인해 조인이 작동하지 않습니다.팬더에서 csv 파일을 읽는 중 날짜 문제가 발생했습니다.

내 기본 날짜 색인은 fn_range_date() 함수에 의해 생성되며 형식은 YYYY-MM-DD이며 csv 파일의 날짜 대부분은 DD/YY/YYYY (+ 타임 스탬프) 형식입니다. 나는 read_csv에서 파서를 곧바로 시도했지만 성공하지는 못했다.

#!/usr/bin/python3 
import pandas as pd 
import datetime 

def fn_range_date(): 
    start = datetime.date(2015, 9, 21) 
    end = datetime.date(2017, 9, 11) 
    days = pd.Series(pd.date_range(start, end, freq="W-MON")) 
    df = pd.DataFrame({'DateID': days}) 
    return df 

ind = fn_range_date() 
ind.set_index('DateID', inplace=True) 

df1 = pd.pandas.read_csv('input.csv', index_col=0, header=None).T 
df1.columns = ['DateID', 'Value'] 
df1.set_index(date, inplace=True) 

result = ind.join(df1, how='outer') 
print (result) 

내 csv 파일은 다음과 같습니다

Date 21/09/2015 00:00 28/09/2015 00:00 05/10/2015 00:00 12/10/2015 00:00 
Value 40,185 18,246 18,901 19,931 

어떻게이 문제를 해결하기 위해? 날짜는 YYYY-MM-DD 형식이 이상적입니다.

답변

0

이 문제를 해결할 수있었습니다. csv 파일은 어색한 형식이므로 제대로 읽으려면 먼저 파일을 변환해야합니다.

def fn_read_csv(filename): 
    pd.read_csv(filename).T.to_csv('temp_' + filename,header=False) 
    parser = lambda date: pd.datetime.strptime(date, '%d/%m/%y %H:%M:%S') 
    df = pd.pandas.read_csv('temp_' + filename, parse_dates=[0], date_parser=parser, index_col=0) 
    df.columns = [filename.replace(".csv","")] 
    df.index.rename('DateID', inplace=True) 
    os.remove('temp_' + filename) 
    return df