2014-10-12 10 views
0

저는 StackOverflow와 pandas를 처음 사용합니다. 나는 다음과 같은 형식으로 주식 시장 빈 데이터와 큰 CSV 파일에 읽기 시도하고있다 :팬더는 datetime에 csv dateint 열을 읽습니다.

date,time,open,high,low,close,volume,splits,earnings,dividends,sym 
20130625,715,49.2634,49.2634,49.2634,49.2634,156.293,1,0,0,JPM 
20130625,730,49.273,49.273,49.273,49.273,208.39,1,0,0,JPM 
20130625,740,49.1866,49.1866,49.1866,49.1866,224.019,1,0,0,JPM 
20130625,745,49.321,49.321,49.321,49.321,208.39,1,0,0,JPM 
20130625,750,49.3306,49.369,49.3306,49.369,4583.54,1,0,0,JPM 
20130625,755,49.369,49.369,49.369,49.369,416.78,1,0,0,JPM 
20130625,800,49.369,49.369,49.3594,49.3594,1715.05,1,0,0,JPM 
20130625,805,49.369,49.369,49.3306,49.3306,1333.7,1,0,0,JPM 
20130625,810,49.3306,49.3786,49.3306,49.3786,1567.09,1,0,0,JPM 

I 팬더

에 DataFrame에 문제가
import numpy as np 
import scipy as sp 
import pandas as pd 
import datetime as dt 
fname = 'bindat.csv' 
df  = pd.read_csv(fname, header=0, sep=',') 

을 읽을 수있는 다음과 같은 코드를 날짜 및 시간 열은 int64로 읽혀집니다. 이 두 가지를 다음과 같은 단일 타임 스탬프에 병합하고 싶습니다. 2013-06-25 07:15:00.

df['date'] = pd.to_datetime(df['date'].astype(str)) 
df['time'] = pd.to_datetime(df['time'].astype(str)) 

첫 번째 명령 변환 작동하지만, 시간이 이상한 것 같다

는 심지어 제대로 사용 읽어 시간을 얻기 위해 고군분투하고있다.

df.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 9999 entries, 0 to 9998 
Data columns (total 11 columns): 
date   9999 non-null datetime64[ns] 
time   9999 non-null object 
open   9999 non-null float64 
high   9999 non-null float64 
low   9999 non-null float64 
close  9999 non-null float64 
volume  9999 non-null float64 
splits  9999 non-null float64 
earnings  9999 non-null int64 
dividends 9999 non-null float64 
sym   9999 non-null object 
dtypes: datetime64[ns](1), float64(7), int64(1), object(2)None 

그리고 나서 하나의 DatetimeIndex로 병합하고 싶습니다.

모든 의견을 크게 환영합니다.

건배!

+0

그 시간 데이터는 무엇입니까? '715'는'0715' 또는'1155'를 나타내는가? 아니면 ...? – jonrsharpe

+0

죄송합니다, 0715를 대표하지만 데이터가 나타나는 방식입니다 – tdiddy

답변

6

이렇게하는 데는 몇 가지 방법이 있습니다. read_csv 중에 한 가지 방법은 날짜를 구문 분석 할 날짜와 시간 열을 결합 parse_dates을 말하고 인라인 함수를 정의하는 parse_datesdate_parser 인수를 사용하는 것입니다 : 나는에 추가 행을 추가

>>> df = pd.read_csv("bindat.csv", parse_dates=[["date", "time"]], 
date_parser=lambda x: pd.to_datetime(x, format="%Y%m%d %H%M"), 
index_col="date_time") 
>>> df 
         open  high  low close volume splits earnings dividends sym 
date_time                       
2013-06-25 07:15:00 49.2634 49.2634 49.2634 49.2634 156.293  1   0   0 JPM 
2013-06-25 07:30:00 49.2730 49.2730 49.2730 49.2730 208.390  1   0   0 JPM 
2013-06-25 07:40:00 49.1866 49.1866 49.1866 49.1866 224.019  1   0   0 JPM 
2013-06-25 07:45:00 49.3210 49.3210 49.3210 49.3210 208.390  1   0   0 JPM 
2013-06-25 07:50:00 49.3306 49.3690 49.3306 49.3690 4583.540  1   0   0 JPM 
2013-06-25 07:55:00 49.3690 49.3690 49.3690 49.3690 416.780  1   0   0 JPM 
2013-06-25 08:00:00 49.3690 49.3690 49.3594 49.3594 1715.050  1   0   0 JPM 
2013-06-25 08:05:00 49.3690 49.3690 49.3306 49.3306 1333.700  1   0   0 JPM 
2013-06-25 08:10:00 49.3306 49.3786 49.3306 49.3786 1567.090  1   0   0 JPM 
2013-06-25 16:10:00 49.3306 49.3786 49.3306 49.3786 1567.090  1   0   0 JPM 

시간 끝내기.

+0

완벽하게 일했습니다! 정말 고맙습니다. – tdiddy

관련 문제