【问题标题】:Importing Excel into Panda Dataframe将 Excel 导入 Panda Dataframe
【发布时间】:2018-04-07 18:38:09
【问题描述】:

以下内容只是 Coursera 数据科学作业的开始。我希望这不是微不足道的。但我迷失了这一点,找不到答案。 我被要求将 Excelfile 导入 panda 数据框并在之后对其进行操作。该文件可以在这里找到:http://unstats.un.org/unsd/environment/excel_file_tables/2013/Energy%20Indicators.xls

让我感到困难的是

a) 有 17 行的“开销”和一个页脚 b) 前两列是空的 c) 索引列没有标题名称

如果搜索和阅读几个小时后,我想出了这个无用的行:

energy=pd.read_excel('Energy Indicators.xls',
                     sheetname='Energy',
                     header=16,
                     skiprows=[17],
                     skipfooter=38,
                     skipcolumns=2
                    )

这似乎产生了一个多索引数据框。尽管命令 energy.head() 什么都不返回。

我有两个问题:

  1. 我做错了什么。在这个练习之前,我认为我理解了数据框。但是现在我完全一无所知并且迷失了:-((
  2. 我该如何解决这个问题?我需要做什么才能将此 Exceldata 放入索引包含国家/地区的数据帧中?

谢谢。

【问题讨论】:

  • 我认为你需要skiprows=17,而不是[17]
  • 对不起。如果它会那么容易,我会很高兴。不,这没有任何改变。 :-(

标签: python excel pandas dataframe import


【解决方案1】:

我认为你需要添加参数:

  • index_col 用于将列转换为索引
  • usecols - 按位置解析列
  • 将标题位置更改为15

energy=pd.read_excel('Energy Indicators.xls',
                     sheet_name='Energy',
                     skiprows=[17],
                     skipfooter=38,
                     header=15,
                     index_col=[0],
                     usecols=[2,3,4,5]
                    )
print (energy.head())

               Energy Supply Energy Supply per capita  \
Afghanistan              321                       10   
Albania                  102                       35   
Algeria                 1959                       51   
American Samoa           ...                      ...   
Andorra                    9                      121   

                Renewable Electricity Production  
Afghanistan                            78.669280  
Albania                               100.000000  
Algeria                                 0.551010  
American Samoa                          0.641026  
Andorra                                88.695650  

【讨论】:

  • 不客气!文档中有,见here
  • 注意:sheetname 现在已被替换为 sheet_name
【解决方案2】:

我安装了xlrd包,用pip install xlrd然后加载文件成功如下:

In [17]: df = pd.read_excel(r"http://unstats.un.org/unsd/environment/excel_file_tables/2013/Energy%20Indicators.xls",
    ...:                      sheetname='Energy',
    ...:                      header=16,
    ...:                      skiprows=[17],
    ...:                      skipfooter=38,
    ...:                      skipcolumns=2)  

In [18]: df.shape 
Out[18]: (227, 3)

In [19]: df.head() 
Out[19]: 
                                  Energy Supply Energy Supply per capita  \
NaN Afghanistan    Afghanistan              321                       10   
    Albania        Albania                  102                       35   
    Algeria        Algeria                 1959                       51   
    American Samoa American Samoa           ...                      ...   
    Andorra        Andorra                    9                      121   

                                   Renewable Electricity Production  
NaN Afghanistan    Afghanistan                            78.669280  
    Albania        Albania                               100.000000  
    Algeria        Algeria                                 0.551010  
    American Samoa American Samoa                          0.641026  
    Andorra        Andorra                                88.695650  

In [20]: pd.__version__ 
Out[20]: u'0.20.3'

In [21]: df.columns 
Out[21]: 
Index([u'Energy Supply', u'Energy Supply per capita',
       u'Renewable Electricity Production'],
      dtype='object')

请注意,我使用的是最新版本的 pandas 0.20.3,请确保您的系统上安装了最新版本。

【讨论】:

  • 对不起。我无法安装任何进一步的模块。这是一个基于网络的笔记本。但这是一种有趣的方法。谢谢。
【解决方案3】:

我修改了您的代码并能够将数据放入数据框中。而不是skipcolumns(不起作用),我使用了usecols的参数,如下所示

energy=pd.read_excel('Energy_Indicators.xls',
                     sheetname='Energy',
                     header=16,
                     skiprows=[16],
                     skipfooter=38,
                     usecols=[2,3,4,5]
                    )

    Unnamed: 2      Petajoules  Gigajoules  %
0   Afghanistan     321         10          78.669280
1   Albania         102         35          100.000000
2   Algeria         1959        51          0.551010
3   American Samoa  ...         ...         0.641026
4   Andorra         9           121         88.695650

为了使国家作为索引,你可以这样做

# Rename the column Unnamed: 2 to Country
energy = energy.rename(columns={'Unnamed: 2':'Country'})

# Change the index to country column    
energy.index = energy['Country']

# Drop the extra country column
energy = energy.drop('Country', axis=1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 2019-12-31
    • 2017-09-08
    • 2016-06-01
    相关资源
    最近更新 更多