2015-01-06 8 views
1

나는이 같은 팬더를 사용하여 일부 HTML 데이터를 분석하고 있습니다 단지 두 개의 기둥 (순위와 대학 이름) 만 있다는 것입니다. 현재 해결 방법은 다음과 같습니다.재편 팬더 데이터 프레임

ug_copy = rankings[0][1:] 
npa1 = ug_copy.as_matrix(columns=[0,1]) 
npa2 = ug_copy.as_matrix(columns=[2,3]) 
npa3 = ug_copy.as_matrix(columns=[4,5]) 

npam = np.append(npa1,npa2) 
npam = np.append(npam,npa3) 

reshaped = npam.reshape((npam.size/2,2)) 

pd.DataFrame(data=reshaped) 

이것은 내가 원하는 것을 제공하지만 아마도 최상의 솔루션 일 수는없는 것 같습니다. 데이터 프레임을 사용하여이 모든 작업을 완료하는 좋은 방법을 찾지 못하는 것 같습니다. 나는 stack/unstack과 데이터 프레임을 pivoting하는 것을 시도했다. (다른 해결책의 일부가 여기 제시했듯이), 그러나 나는 운이 없었다. 나는 이런 식으로 일을 시도했다 :

ug_copy.columns=['Rank','University','Rank','University','Rank','University'] 
ug_copy = ug_copy[1:] 
ug_copy.groupby(['Rank', 'University']) 

나는 작은 것이 틀림 없다.

+0

확인을, 난 당신이 데이터를 여러 열을 가로 질러 걸쳐있는 문제를 참조 당신은 여러 열을 하나의 df로 연결해야합니다. 먼저 열 이름을 고치면 쉽게 될 것입니다. – EdChum

답변

6

이 아마 조금 짧은 (또한 약간의 작업 저장 read_htmlheader 옵션을 사용할 수 있습니다) :

import pandas as pd 
rankings = pd.read_html('https://en.wikipedia.org/wiki/Rankings_of_universities_in_the_United_Kingdom', header=0) 
university_guide = rankings[0] 
df = pd.DataFrame(university_guide.values.reshape((30, 2)), columns=['Rank', 'University']) 
df = df.sort('Rank').reset_index(drop=True) 
print df 
+0

고마워요! '.values' 명령을 간과했는데 ... 매우 도움이되었습니다! – TheOriginalBMan