重塑 Pandas 数据框
Reshaping Pandas Data Frame
我正在使用 Pandas 解析一些 HTML 数据,如下所示:
rankings = pd.read_html('https://en.wikipedia.org/wiki/Rankings_of_universities_in_the_United_Kingdom')
university_guide = rankings[0]
这给了我一个很好的数据框:
我想要的是重塑这个数据框,以便只有两列(排名和大学名称)。我目前的解决方案是做这样的事情:
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 并旋转数据框(正如这里的其他一些解决方案所建议的那样),但我没有任何运气。我试过这样做:
ug_copy.columns=['Rank','University','Rank','University','Rank','University']
ug_copy = ug_copy[1:]
ug_copy.groupby(['Rank', 'University'])
一定是我遗漏了什么小东西!
这可能有点短(另请注意,您可以使用 read_html
中的 header
选项来节省一些工作):
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
我正在使用 Pandas 解析一些 HTML 数据,如下所示:
rankings = pd.read_html('https://en.wikipedia.org/wiki/Rankings_of_universities_in_the_United_Kingdom')
university_guide = rankings[0]
这给了我一个很好的数据框:
我想要的是重塑这个数据框,以便只有两列(排名和大学名称)。我目前的解决方案是做这样的事情:
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 并旋转数据框(正如这里的其他一些解决方案所建议的那样),但我没有任何运气。我试过这样做:
ug_copy.columns=['Rank','University','Rank','University','Rank','University']
ug_copy = ug_copy[1:]
ug_copy.groupby(['Rank', 'University'])
一定是我遗漏了什么小东西!
这可能有点短(另请注意,您可以使用 read_html
中的 header
选项来节省一些工作):
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