2012-06-04 3 views
1

나는이 멋진 도구를 배우기 시작했으며, 여러 시간 계열을로드하고이를 "마스터"날짜 벡터와 정렬하는 간단한 작업에 박혀 있습니다.정렬되지 않은 시계열을 하나의 인덱스로 DataFrame에로드 하시겠습니까?

예 : 저는 csv 파일을 가지고 있습니다 : Data.csv 여기서 첫 번째 행에는 헤더가 포함되어 있습니다 "Date1, Rate1, Date2, Rate2" 여기서 Date1은 Rate1의 날짜이고 Date2는 Rate2의 날짜입니다.

이 경우 Rate2에 더 많은 관찰이 있습니다 (시작 날짜는 Date1과 동일하지만 종료 날짜가 Date1의 종료 날짜보다 빠르며 누락 값이 적음) 모든 항목에 따라 색인을 생성해야합니다 ~ Date2.

다음 DataFrame을 얻는 방법은 무엇입니까? 나는 공식 pandas.pdf 및 인터넷 검색의 예제를 따라하는 것을 시도했다

index(Date2) Rate1 Rate2 
11/12/06  1.5 1.8 
12/12/06  NaN 1.9 
13/12/06  1.6 1.9 
etc 
etc 
11/10/06  NaN 1.2 
12/10/06  NaN 1.1 
13/10/06  NaN 1.3 

(또는 비슷한 달성)하지만 아무 소용.

가 대단히 감사합니다?

이에 대한 좋은 조리법 거기 (:(난 씨 McKinney's 팬더 책의 사전 Edition은 구입하지만 장 어디 있지 아직 준비 팬더를 concering)

편집 :이 개 .CSV 파일에 일련의 분리의 대답에 관하여 : 그러나 무엇 나는 매우 많은 시계열이있는 경우, 예를 들어

날짜 1 속도 1 DATE2 Rate2 ... DATEN RateN

그리고 내가 아는 건 날짜가 거의 같아야한다는 것입니다. 누락 된 값 (날짜 또는 요율 항목이없는 경우)을 포함한 일련의 예외가 있습니다 (이는 일부 금융 경제 시계열의 예가 될 것입니다. way)

모든 데이터를 별도의 .CSV로 분할하려면이 데이터 집합을로드하는 것이 가장 좋습니다.

EDIT2 아치 라이트가 완전히 맞습니다. 단지 "csv_read"를 수행하면 문제가 해결됩니다.

기본적으로 다음 졸이다 것입니다 내 질문 : 는 시리즈 자체 (엑셀에서 내 보낸 .CSV 파일)

감사에 대한 여러 정렬되지 않은 시간 각 시리즈는 날짜 열이 시리즈, 및 열 가입 방법 DATE2 날짜가있는 경우 다시 당신이 날짜 1이 날짜 2의 부분 집합이 있는지 확인하고 DATE2가 빈 값을 포함하지 않는 경우

답변

1

, 당신은 단순히

df = read_csv('foo.csv', index_col=2, parse_dates=True) 
df = df[["rate1", "rate2"]] 

을 할 수 있지만 복잡 할 것이다 날짜 1 없어. 난 당신이 일반적인 헤더로 날짜가 별도의 파일에 날짜/속도 쌍을 넣어 제안

df1 = read_csv('foo1.csv', index_col=0, parse_dates=True) 
df2 = read_csv('foo2.csv', index_col=0, parse_dates=True) 
df1.join(df2, how="outer") 

편집 : 이 방법은 잘 보이지 않습니다.그래서 당신의 날짜에 NaN를 위해, 당신은 일이 당신이 날짜 같은 경우가 속도를 존재하지만이 있는지 확인해야입니다

dateindex2 = map(lambda x: datetime(int("20"+x.split("/")[2]), int(x.split("/")[0]), int(x.split("/")[1])), filter(notnull, df['Date2'].values)) 
ts2 = Series(df["Rate2"].dropna(), index=dateindex2) 
#same for ts1 
df2 = DataFrame({"rate1":ts1, "rate2":ts2}) 

같은 STH 할 수 있습니다. 왜냐하면 dropna()가 레코드를 변경하고 인덱스가 일치하지 않기 때문입니다.

+0

친애하는 archlight입니다, 감사합니다. 하지만 날짜/요율 시리즈가 여러 개있는 경우에도 여전히 여러 파일로 구분되는 것이 관례입니까? (내 메인 쿼리를 업데이트했습니다.) – luffe

2

데이터를 여러 파일로 분할해야한다고 생각하지 않습니다. 파일을 read_csv으로로드하고 각 날짜/비율 쌍을 별도의 시계열로 변환하는 방법은 어떻습니까? 그래서 코드의 모습하십시오 DataFrame의 데이터를 함께 한 후 가입 정렬, 이제

data = read_csv('foo.csv') 

ts1 = Series(data['rate1'], index=data['date1']) 
ts2 = Series(data['rate2'], index=data['date2']) 

, 당신이 할 수 있습니다

frame = DataFrame({'rate1': ts1, 'rate2': ts2}) 

ts1에서 날짜의 결합을 형성하고 ts2을 선택하고 모든 데이터를 정렬합니다 (적절한 경우 NA 값 삽입).

또는, N 시계열이있는 경우, 당신은 할 수 :

all_series = {} 
for i in range(N): 
    all_series['rate%d' % i] = Series(data['rate%d' % i], index=data['date%d' % i]) 

frame = DataFrame(all_series) 

이 내 경험에 매우 일반적인 패턴

+1

고맙습니다 만 여기에 두 가지 문제가 있습니다 : 1) 시리즈가 시계열로 인식되지 않습니다. 날짜로 인덱스를 구문 분석 할 수있는 방법이 있습니까? 2) 시리즈 (이 경우에는 약간 짧은 시리즈 인 ts1) 색인에는 NaN이 포함됩니다. Excel에서 내보내기 된 CSV 파일에서 읽히기 때문에 시리즈가 종료되면 나머지 항목은 그냥 빈 값. ts1.dropna()를 시도했지만 _index_에서 NaN 만 제거하지 않았습니다. (그리고 _frame = DataFrame ({ 'rate1': ts1, 'rate2': ts2} _ 명령이 작동 할 때까지 모든 NaN을 제거해야했습니다.) 내가 분명히했으면 좋겠습니다. 도움을 주셔서 감사합니다. – luffe

+0

방금 ​​최신 Enthought 배포본으로 업데이트했다는 것을 간단히 알리고 싶습니다. 이것은 아무것도 바뀌지 않았다. 내 데이터 세트를 한 눈에 파악하면 내 질문을 분명히 알 수 있습니다. 여기에 내 시리즈의 모습을 보여주는 대표적인 샘플 링크 (KB) https://dl.dropbox.com/u/13846181/Data.csv 고맙습니다. – luffe

+0

누구? 내 데이터 표현이 흔하지 않습니까? – luffe

관련 문제