2016-07-16 6 views
1

첫 번째 행 (5/1/2002 at 6:00 AM)에서 마지막 행 (11/20/2006 at 2:00 PM)까지의 경과 시간을 알려주는 열이 필요합니다. 2002 년 5 월 1 일부터 몇 시간이 경과했는지 알려주는 추가 열을 어떻게 만듭니 까? 간단한CSV 파일의 경과 시간을 알려주는 방법은 무엇입니까?

  Date Time (HHMM)   Site Plot Replicate Temperature \ 
1  5/1/2002   600 Barre Woods 21   7   4.5 
2  5/1/2002   600 Barre Woods 31   9   6.5 
3  5/1/2002   600 Barre Woods 10   2   5.3 
4  5/1/2002   600 Barre Woods  2   1   4.0 
5  5/1/2002   600 Barre Woods 13   4   5.5 
6  5/1/2002   600 Barre Woods 11   3   5.0 
7  5/1/2002   600 Barre Woods 28   8   5.0 
8  5/1/2002   600 Barre Woods 18   6   4.5 
9  5/1/2002   1400 Barre Woods  2   1   10.3 
10  5/1/2002   1400 Barre Woods 31   9   9.0 
11  5/1/2002   1400 Barre Woods 13   4   11.0 
12  5/1/2002   1400 Barre Woods 18   6   6.5 
13  5/1/2002   1400 Barre Woods 11   3   10.3 
14  5/1/2002   1400 Barre Woods 10   2   10.5 
15  5/1/2002   1400 Barre Woods 28   8   10.3 
16  5/1/2002   1400 Barre Woods 21   7   10.5 
17  5/1/2002   1400 Barre Woods 16   5   10.3 
18 5/22/2002   600 Barre Woods 13   4   6.5 
19 5/22/2002   600 Barre Woods 18   6   5.8 
20 5/22/2002   600 Barre Woods  2   1   5.5 
...   ...   ...   ... ...  ...   ... 
710 11/20/2006   1400 Barre Woods 31   9   7.4 
+1

다음과 같이하십시오. http://stackoverflow.com/questions/22923775/calculate-pandas-dataframe-time-difference-between-two-columns-in-hours-and-minu ... 귀하의 질문은 굵게 표시되어 있습니까? – Sumido

답변

1

: 여기 내 dataframe입니다

  • 파일을 읽어
  • 날짜와 시간을 구문 분석,
  • 가 첫 번째 날짜/시간 델타를 계산,
  • 결과를 씁니다.

    import datetime 
    import io 
    
    data = """\ 
         Date Time (HHMM)   Site Plot Replicate Temperature 
    1  5/1/2002   600 Barre Woods 21   7   4.5 
    2  5/1/2002   600 Barre Woods 31   9   6.5 
    3  5/1/2002   600 Barre Woods 10   2   5.3 
    710 11/20/2006   1400 Barre Woods 31   9   7.4 
    """ 
    
    date_fmt = "%m/%d/%Y %H%M" 
    fisrt_date = None 
    
    with io.StringIO(data) as src_file, io.StringIO(data) as dst_file: 
    
        # copy the header 
        dst_file.write(next(src_file)) 
    
        for line in src_file: 
         parts = line.strip().split() 
         if not parts: 
          dst_file.write(line) 
          continue 
    
         timestamp = parts[1] + " " + parts[2] 
         curr_date = datetime.datetime.strptime(timestamp, date_fmt) 
         if fisrt_date is None: 
          fisrt_date = curr_date 
         delta = curr_date - fisrt_date 
         dst_file.write(line.strip() + " " + str(delta) + "\n") 
    
        print(dst_file.getvalue()) 
    

    당신이 얻을 : 물론

     Date Time (HHMM)   Site Plot Replicate Temperature 
    1  5/1/2002   600 Barre Woods 21   7   4.5 0:00:00 
    2  5/1/2002   600 Barre Woods 31   9   6.5 0:00:00 
    3  5/1/2002   600 Barre Woods 10   2   5.3 0:00:00 
    710 11/20/2006   1400 Barre Woods 31   9   7.4 1664 days, 8:00:00 
    

    , 당신은 델타 값의 형식을 변경할 수 있습니다

다음은 데모 파일 - 류의 객체를 사용하여 구현입니다.

+0

CSV 파일을 문자열 형식으로 변환하고 타임 스탬프 프로세스에서 오류가 발생했습니다. "IndexError : 목록 색인이 범위를 벗어났습니다." –

+0

@Sergio Espejo : 디버그 할 코드 샘플 및 관련 스택 추적을 게시하십시오. 그런데 CSV 파일이 실제로있는 경우 [cvs] (https://docs.python.org/2/library/csv.html) Python 모듈을 사용해보십시오. –

+0

내 문자열이 다음과 같이 표시됩니다. '{ "0": "날짜", "1": "시간 (HHMM)", "2": "CO2-Rh"}' 계속 오류가 발생합니다. IndexError : 목록 인덱스가 범위를 벗어남 " pdb.run ('mymodule.test()'을 실행 한 후에도) –

관련 문제