2016-10-10 2 views
1

내가 팬더로 csv 파일 (SimResults_Daily.csv)을 읽고있다, 그이 구성되어있다 :날짜 형식을 개정 - 다음과 같이 팬더

#, Job_ID, Date/Time, value1, value2, 
0, ID1, 05/01 24:00:00, 5, 6 
1, ID2, 05/02 24:00:00, 6, 15 
2, ID3, 05/03 24:00:00, 20, 21 

등 날짜 시간 형식으로 읽을 수없는 것처럼 pandas parse_dates에 의해, 나는 명령을 사용할 수 있다고 생각했습니다 : str.replace('24:','00:').

내 코드 현재 :

dateparse = lambda x: pd.datetime.strptime(x, '%m-%d %H:%M:%S') 

df = pd.read_csv('SimResults_Daily.csv', 
    skipinitialspace=True, 
    date_parser=dateparse, 
    parse_dates=['Date/Time'], 
    index_col=['Date/Time'], 
    usecols=['Job_ID', 
    'Date/Time', 
    'value1', 
    'value2', 
    header=0) 

는 어디 코드에서 나는 str.replace 명령을 실행해야합니까?

답변

2

당신은 사용할 수 있습니다 : 더블 replace

import pandas as pd 
import io 

temp=u"""#,Job_ID,Date/Time,value1,value2, 
0,ID1,05/01 24:00:00,5,6 
1,ID2,05/02 24:00:00,6,15 
2,ID3,05/03 24:00:00,20,21""" 

dateparse = lambda x: pd.datetime.strptime(x.replace('24:','00:'), '%m/%d %H:%M:%S') 

#after testing replace io.StringIO(temp) to filename 
df = pd.read_csv(io.StringIO(temp), 
    skipinitialspace=True, 
    date_parser=dateparse, 
    parse_dates=['Date/Time'], 
    index_col=['Date/Time'], 
    usecols=['Job_ID', 'Date/Time', 'value1', 'value2'], 
    header=0) 

print (df) 
      Job_ID value1 value2 
Date/Time       
1900-05-01 ID1  5  6 
1900-05-02 ID2  6  15 
1900-05-03 ID3  20  21 

또 다른 해결책 - year도 추가 할 수 있습니다

dateparse = lambda x: x.replace('24:','00:').replace(' ','/1900 ') 

df = pd.read_csv(io.StringIO(temp), 
    skipinitialspace=True, 
    date_parser=dateparse, 
    parse_dates=['Date/Time'], 
    index_col=['Date/Time'], 
    usecols=['Job_ID', 'Date/Time', 'value1', 'value2'], 
    header=0) 

print (df) 
      Job_ID value1 value2 
Date/Time       
1900-05-01 ID1  5  6 
1900-05-02 ID2  6  15 
1900-05-03 ID3  20  21 

dateparse = lambda x: x.replace('24:','00:').replace(' ','/2016 ') 

df = pd.read_csv(io.StringIO(temp), 
    skipinitialspace=True, 
    date_parser=dateparse, 
    parse_dates=['Date/Time'], 
    index_col=['Date/Time'], 
    usecols=['Job_ID', 'Date/Time', 'value1', 'value2'], 
    header=0) 

print (df) 
      Job_ID value1 value2 
Date/Time       
2016-05-01 ID1  5  6 
2016-05-02 ID2  6  15 
2016-05-03 ID3  20  21 
+0

항상 자리 -에 있습니다! – Andreuccio

+0

매일 데이터가 아닌 시간별 값을 사용하여 유사한 데이터 세트를 가져 오는 작업에 직면합니다. 그러므로'24 :'을'00 :'으로 바꾸는 대신에'24 :'-'23 :', ...,'01 :'-''모든 시간을 1 단위 뒤로 이동시켜야합니다. 00 :'. 어떻게 코드가 변경됩니까? – Andreuccio

+0

같은 방식으로,'df.index = df.index - pd.Timedelta (1, unit = 'h') '와 같은 한 시간 만 빼면 – jezrael