【问题标题】:Pandas reading and sorting a file's contentPandas 读取和排序文件内容
【发布时间】:2017-12-25 12:46:31
【问题描述】:

我正在从 SIPRI 读取文件。它读入 pandas 并创建了数据框,我可以显示它,但是当我尝试按列排序时,我得到一个 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'

【问题讨论】:

    标签: python pandas sorting


    【解决方案1】:

    您收到关键错误,因为数据框中不存在“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']
    

    【讨论】:

      【解决方案2】:

      我想这可能会有所帮助:

      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]
      

      【讨论】:

        【解决方案3】:
        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)
        

        【讨论】:

          猜你喜欢
          • 2015-01-27
          • 2017-09-14
          • 2013-04-08
          • 2011-08-18
          • 1970-01-01
          • 2013-03-28
          • 1970-01-01
          • 2021-12-25
          • 1970-01-01
          相关资源
          最近更新 更多