熊猫阅读和排序文件的内容

时间:2017-07-20 02:46:41

标签: python pandas sorting

我正在阅读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'

3 个答案:

答案 0 :(得分:0)

  1. 我下载了该文件,看起来2016年本身不是列,因此您需要稍微修改数据框,以便将国家/地区的行更改为标题。
  2. 接下来你需要说data.sort_values(by = 2016,ascending = False)。将列名称视为整数而不是字符串。
  3.   

    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]