2017-04-11 1 views
1

여기에 파이썬 newb 비트가 있습니다. 초보자로서 클래스를 배우는 것과는 다른 기능과 메소드를 쉽게 배울 수 있지만 파이썬에서 "최고의"코드를 작성하는 방법을 배우는 것도 또 다른 방법입니다.데이터 프레임의 서브 세트를 중복하지 않고 플롯

데이터 프레임 spdf의 일부분을 그려 볼 간단한 시나리오가 있습니다. 나는 단지 speed이 0보다 큰 인스턴스를 플롯하고 datetime을 내 X 축으로 사용하려고합니다. 나는이 작업을 완수하기 위해 관리했습니다 방법은 나에게 굉장히 중복 보인다

ts = pd.Series(spdf[spdf['speed']>0]['speed'].values, index=spdf[spdf['speed']>0]['datetime']) 

ts.dropna().plot(title='SP1 over Time') 

두 번 내 dataframe의 부분 집합을 지정하지 않고이 데이터를 그릴 수있는 더 나은 방법이 있나요?

답변

1

새로운 시리즈를 제작할 필요가 없습니다. 당신은 당신이 당신의 경우 df

df[df['col'] > 0]].plot() 

원래 사용하여 플롯 할 수 있습니다 :

spdf[spdf['speed'] > 0].dropna().plot(title='SP1 over Time') 

나는 당신의 spdf 목적이 무엇인지 확실하지 않다거나이 방법을 만들었습니다. 'datetime'열을 사용하여 플롯해야하는 경우 df의 색인으로 설정할 수 있습니다. CSV에서 데이터를 읽는 경우 parse_dates 키워드 인수를 사용하거나 이미 가지고있는 데이터를 사용할 수 있습니다. dfdf.set_index('datetime')을 사용하여 색인을 변경할 수 있습니다. df.info()을 사용하면 현재 색인 및 해당 데이터 유형에서 사용중인 항목을 볼 수 있습니다.

+0

정말 도움이됩니다. 감사합니다. ad-hoc 인덱스 (일종의)를 설정하면 내 현재 상황에 확실히 도움이됩니다. 그래서 플롯 팅 코드는 간단합니다 : spdf.set_index ('datetime'). plot (y = 'speed') 일반적으로 여러 작업에 데이터 프레임의 하위 집합을 사용하고 그것을 복제? 솔직하게 나는 다음과 같이하려고했습니다 : spdf [spdf [ 'speed']> 0] f : ... 여기에 무언가를하십시오 ... –

+0

@AustinT 일반적으로 대답하기가 어렵습니다. 데이터에 대한 여러 가지 어려운 작업에 대해 df 또는 시리즈를 인수로 사용하여 수행해야하는 모든 작업을 수행하는 함수를 작성하는 것이 좋습니다. 초기 탐험을하는 중이라면 선택을''mask = df [df [ 'col']> 0]]'(초기 접근법과 유사) 변수로 설정하여 타이핑을 줄일 수 있습니다. 보다 구체적인 예가 있으면 더 좋은 대답을하려고 노력할 것입니다. 행운을 빕니다! – Bprodz

관련 문제