如果" index_col" pandas read_excel失败和" parse_cols"已设定

时间:2017-01-05 17:45:09

标签: python pandas

我有一个Excel工作表,我将其作为Coursera课程的一部分使用,具有以下结构:

enter image description here

我尝试使用以下代码创建一个pandas日期框架,其中我设置了index_col = 4和parse_cols = [4,6]并且它失败了。

def get_recession_start():
    '''Returns the year and quarter of the recession start time as a 
    string value in a format such as 2005q3'''
    df1 = pandas.read_excel('gdplev.xls',
                            header=None,
                            skiprows=220,
                            index_col=4,
                            names=['Quarter', 'GDP'],
                            parse_cols=[4,6])
    return df1

get_recession_start()

为什么我无法选择特定列来构建数据框并将其中一个设置为索引?

我收到的错误消息是:

enter image description here

我使用的是Python 3和Pandas 0.18.1

感谢帖子中的答案。

def get_recession_start():
    '''Returns the year and quarter of the recession start time as a 
    string value in a format such as 2005q3'''
    df1 = pd.read_excel('gdplev.xls',
                            header=None,
                            skiprows=220,
                            index_col=0,
                            names=['GDP'],
                            parse_cols=[4,6])
    df1.index.name = 'Quarter'
    return df1

print(get_recession_start())

输出是Quater作为索引,GDP是列

             GDP
Quarter         
2000q1   12359.1
2000q2   12592.5
2000q3   12607.7
2000q4   12679.3
2001q1   12643.3

2 个答案:

答案 0 :(得分:1)

将index_col更改为0

 df1 = pandas.read_excel('gdplev.xls', header=None, skiprows=220, index_col=0,  names=['Quarter', 'GDP'], parse_cols=[4,6])
 print df1.index

答案 1 :(得分:1)

好像你必须在parse_cols中包含索引列。由于您提供了names=['Quarter', 'GDP'],因此除索引列之外还需要2列。您可以使用parse_cols=[4,5,6]parse_cols=range(4,7)

测试一下:

def get_recession_start():
    '''Returns the year and quarter of the recession start time as a 
    string value in a format such as 2005q3'''
    df1 = pandas.read_excel('gdplev.xls',
                            header=None,
                            skiprows=220,
                            index_col=0,
                            names=['Quarter', 'GDP'],
                            parse_cols=[4,5,6])
    return df1

print(get_recession_start())