我正在阅读SIPRI的文件。它读入大熊猫并创建了数据框,我可以显示它但是当我尝试按列排序时,我得到一个KeyError
。这是代码和错误:
import os
import pandas as pd
os.chdir('C:\\Users\\Student\\Documents')
#Find the top 20 countries in military spending by sorting
data = pd.read_excel('SIPRI-Milex-data-1949-2016.xls',
header = 0, index_col = 0, sheetname = 'Current USD')
data.sort_values(by = '2016', ascending = False)
KeyError: '2016'
答案 0 :(得分:0)
data = pd.read_excel('SIPRI-Milex-data-1949-2016.xlsx', header = 0,index_col = 0,sheetname ='Current USD')
data = data[4:] data.columns = data.iloc[0] data.sort_values(by =2016, ascending = False)
答案 1 :(得分:0)
您收到密钥错误,因为数据框中不存在“2016”列。基于excel文件,它是整数形式。必须在数据框中清理数据以对事物进行排序。
您可以跳过前5行和后8行来获取国家/地区,然后将所有字符串和缺失值替换为AnyObject
。以下代码将帮助您实现这一目标。
NaN
输出:
data = pd.read_excel('./SIPRI-Milex-data-1949-2016.xlsx', header = 0, index_col = 0, sheetname = 'Current USD',skiprows=5,skip_footer = 8)
data = data.replace(r'\s+', np.nan, regex=True).replace('xxx',np.nan)
new_df = data.sort_values(2016,ascending=False)
top_20 = new_df[:20].index.tolist()
答案 2 :(得分:0)
嗯,这可能会有所帮助,我想:
data = pd.read_excel('SIPRI-Milex-data-1949-2016.xlsx', skiprows=5, index_col = 0, sheetname = 'Current USD')
data.dropna(inplace=True)
data.sort_values(by=2016, ascending=False, inplace=True)
要获得Top20,您可以使用:
data[data[2016].apply(lambda x: isinstance(x, (int, float)))][:20]