2017-07-20 54 views
1

我正在從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
  1. 我下載的文件,看起來2016年是不是一個列本身,所以你需要修改數據幀位,從而改變國家行是頭。
  2. 接下來你需要說data.sort_values(by = 2016,ascending = False)。將列名稱視爲整數而不是字符串。

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) 
0

你拿到鑰匙錯誤,因爲列「2016」是不存在的數據幀。基於excel文件的整數形式。清理數據必須在數據框中進行排序。

您可以跳過前5行和後8行以獲取國家/地區,然後用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() 

輸出:

['USA', 'China, P.R.', 'Russian Federation', 'Saudi Arabia', 'India', 'France', 'UK', 'Japan', 'Germany', 'Korea, South', 'Italy', 'Australia', 'Brazil', 'Israel', 'Canada', 'Spain', 'Turkey', 'Iran', 'Algeria', 'Pakistan'] 

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]