繁体   English   中英

“索引”object 没有属性“级别”

[英]'Index' object has no attribute 'levels'

我有以下命令:

def convert_housing_data_to_quarters():
    import pandas as pd 
    housing = pd.read_csv('City_Zhvi_AllHomes.csv')
    housing = housing.drop(housing.columns[6:51],axis=1)
    times = housing[housing.columns[6:len(housing.columns)]]
    def quarters(col):
        if col.endswith(("01","02","03")):
            s = col[:4] + "q1"
        elif col.endswith(("04", "05", "06")):
            s = col[:4] + "q2"
        elif col.endswith(("07", "08", "09")):
            s = col[:4] + "q3"
        else:
            s = col[:4] + "q4"
        return s  
    times = times.groupby(quarters,axis=1).mean()
    df = pd.concat([times, housing[['State','RegionName']]], axis=1)
    arrays = [housing['State'],housing['RegionName']]
    index = pd.MultiIndex.from_arrays(arrays)
    index = index.sortlevel(level=0)
    df = df.reindex(index,level=0)
    return df 
convert_housing_data_to_quarters()

但是,我不断收到错误消息:

'Index' object has no attribute 'levels'

我正在尝试创建一个分层多索引,索引顶部为“状态”(级别 = 0),后跟“区域名称”(级别 = 1)。

有人能帮我解决我哪里出错了吗?

您不能使用reindex ,因为没有MultiIndex 因此,在聚合之前对两列都使用DataFrame.set_index ,因此可以简化解决方案:

def convert_housing_data_to_quarters():
    import pandas as pd 
    housing = pd.read_csv('City_Zhvi_AllHomes.csv')
    housing = housing.drop(housing.columns[6:51],axis=1)
    times = housing[housing.columns[6:len(housing.columns)]]
    times = times.set_index(['State','RegionName']).sort_index()
    def quarters(col):
        if col.endswith(("01","02","03")):
            s = col[:4] + "q1"
        elif col.endswith(("04", "05", "06")):
            s = col[:4] + "q2"
        elif col.endswith(("07", "08", "09")):
            s = col[:4] + "q3"
        else:
            s = col[:4] + "q4"
        return s  
    return times.groupby(quarters,axis=1).mean()
convert_housing_data_to_quarters()

也可以将日期转换为季度,而不是您的 function:

def convert_housing_data_to_quarters():
    housing = pd.read_csv('City_Zhvi_AllHomes.csv')
    housing = housing.drop(housing.columns[6:51],axis=1)
    times = housing.iloc[:, 6:len(housing.columns)]
    times = times.set_index(['State','RegionName']).sort_index()

    quarters = pd.to_datetime(times.columns, format='%Y-%m').to_period('Q')
    return  times.groupby(quarters,axis=1).mean()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM