2014-12-28 9 views
1

:읽기 CSV 나는이 형태의 CSV 읽을하려고

2014,92,1931,6.234,10.14 
2014,92,1932,5.823,9.49 
2014,92,1933,5.33,7.65 
2014,92,1934,4.751,6.19 
2014,92,1935,4.156,5.285 
2014,92,1936,3.962,4.652 
2014,92,1937,3.74,4.314 
2014,92,1938,3.325,3.98 
2014,92,1939,2.909,3.847 
2014,92,1940,2.878,3.164 

이 명확하게하기 위해, 이것이 (년, 일 년, 2400 시간 및 2 열 값).

나는, 이전 문제의 문제에 대한 몇 가지 생각을했지만, 아무 소용이, 그리고 ... 몇 가지 문제의 문제로

위의 질문에서 언급 한 바와 같이 (Create an indexed datetime from date/time info in 3 columns using pandas)

을 증명하는 것있다

TypeError: parser() takes exactly 1 argument (3 given) 

이 그것에 0,1,2을 가진 인수은 "parse_dates"로 인해 다음 "read_csv"시도

df = pd.read_csv("home_prepped.dat", parse_dates={"dt" : [0,1,2]}, 
        date_parser=parser, header=None) 

는 형식 오류를 트리거합니다. 나는 또한 대괄호 [[0,1,2] 얻을에서 그들을 퍼팅 시도했다 :

ValueError: [0, 1, 2] is not in list 

내가 parse_dates이 = TRUE로 설정하여이 과거받은 난 그냥 set_index 후하지만이를 얻을 수 있다고 생각했다 :

형식 오류 :하지 numpy.int64

내 파서는 너무 형식에 끊었 도착, 나는 제로 패딩 값 '올해의 날 "에 대해 충돌하는 이야기를 읽고, 문자열이어야합니다. 내 것은 0으로 채워지지 않았지만, 여전히 오류를 넘어서는 형식은 제 1의 가치 인 해에 매달 렸습니다! '2014'말

def parser(x): 
    return pd.datetime.strptime(x, '%Y %j %H%M') 

그래서 참으로 내가 가진 오류에 인식되지, 그리고 '92'(올해의 날) 인식 할 수 없습니다 만, 적어도 strptime가 수있었습니다 원인을 격려 한 다음은 파서이다 형식을 시험해보기 위해 "통과"해라.

이것이 내 데이터와 관련이 있는지 궁금합니다.

이 datetime 정보를 datetime으로 인덱싱하는 방법을 찾고 있는데 문제가 하나도 없습니다. 내가 앞서 간 누군가가 패딩의 문제가되는 형식을 테스트하고 싶은 경우에 약간의 줄리안 패딩 한 아래 참조 : 당신의 도움들에 대한

2014,092,1931,6.234,10.14 
2014,092,1932,5.823,9.49 
2014,092,1933,5.33,7.65 
2014,092,1934,4.751,6.19 
2014,092,1935,4.156,5.285 
2014,092,1936,3.962,4.652 
2014,092,1937,3.74,4.314 
2014,092,1938,3.325,3.98 
2014,092,1939,2.909,3.847 
2014,092,1940,2.878,3.164 

감사합니다, 난 정말 여기에 좌절하기 시작하고있다 : S를

답변

1

%M (분)에 %m (월) 수정 한 후, 코드는 나를 위해 작동 :

>>> import pandas as pd 
>>> print pd.version.version 
0.15.2-10-gf7af818 
>>> 
>>> def parser(x): 
...   return pd.datetime.strptime(x, '%Y %j %H%M') 
... 
>>> df = pd.read_csv("home_prepped.dat", parse_dates={"dt" : [0,1,2]}, 
...     date_parser=parser, header=None) 
>>> df 
        dt  3  4 
0 2014-04-02 19:31:00 6.234 10.140 
1 2014-04-02 19:32:00 5.823 9.490 
2 2014-04-02 19:33:00 5.330 7.650 
3 2014-04-02 19:34:00 4.751 6.190 
4 2014-04-02 19:35:00 4.156 5.285 
5 2014-04-02 19:36:00 3.962 4.652 
6 2014-04-02 19:37:00 3.740 4.314 
7 2014-04-02 19:38:00 3.325 3.980 
8 2014-04-02 19:39:00 2.909 3.847 
9 2014-04-02 19:40:00 2.878 3.164 

그러나 잠시 동안이 주위에 재생 후, 매우 이상한 행동이있을 때 오류 일어난다, 이상한 오류 메시지가 나오므로이 오류를 디버그하는 것이 왜 어려운지 알 수 있습니다.


위가 작동하지 않는 어떤 이유로, 당신은 일을 시도 할 수있는 경우 자신을 구문 분석 :

위에서 언급 한 바와 같이
df = pd.read_csv("home_prepped.dat", header=None) 
timestr = df.iloc[:,:3].astype(str).apply(' '.join,axis=1) 
df = df.iloc[:,3:] 
times = pd.to_datetime(timestr, format='%Y %j %H%M') 
df["dt"] = times 

, 뭔가 잘못 (예를 들어,구문 분석 오류) 오류 메시지는 read_csv에서 매우 혼란 스럽습니다.

+0

아, 월간 오타, 감사합니다. 나는 실제로 그 직후에 그것을 보았다. 어쨌든,이 작업에 감사드립니다 ... 나는 버전을 실행 중임을 언급해야합니다 : [80] : pd .__ version__ Out [80] : '0.15.2' – geokrowding

+0

아주 무자비한 방식으로하는 것. 문제의 원인이되는 데이터에 이상이있는 경우'times' 행이 실패 할 수 있습니다. 그렇다면 귀찮은 가치관을 찾아야합니다. – DSM

+0

이봐, 너 정말 너의 물건을 안다. 나는 파이썬과보다 bash에 더 익숙하다. 내가 판다에 데려 오기 전에 날짜를 변환하면 상황이 더 쉬울 것이라고 생각하니? – geokrowding

1

다음과 같이 작동하는 것 같습니다. 이것이 내가 제대로 테스트하는 방법에 확신하지 작업을 판다에 아무것도 가져왔다 처음이다 명심하지만 형식을 인식하고 말한다 : 나는이 생각으로, 달콤한

<class 'pandas.tseries.index.DatetimeIndex'> 
[2014-04-02 19:31:00, ..., 2014-12-21 23:59:00] 
Length: 337917, Freq: None, Timezone: None 

내가 datetime을 마침내 색인화했다는 것을 의미합니다! 여기

In [41]: 

import numpy as np 
import pandas as pd 
from datetime import datetime 
In [60]: 

def parse(yr, yearday, hrmn): 
      date_string = ''.join([yr, yearday, hrmn]) 
      return datetime.strptime(date_string,"%Y%j%H%M") 
In [61]: 


df = pd.read_csv('home_prepped.csv', parse_dates={'datetime':[0,1,2]}, date_parser=parse, index_col='datetime', header=None) 

지금 나는 .join 전에 ''사이에 공백을 넣어하려고 ... 내가 무슨 짓을 그리고 그것은 %의 Y의 %의 J를 분리하지만 "A를 참조하는 관리 1 "을 % H의 일부로 사용합니다. 그래서 나는 공간을 없애고 포맷을 공간없는 것으로 바꾸었다.

이 DSM에 대한 연구에 감사드립니다.