разделение столбцов pandas ValueError (putmask: маска и данные должны быть одного размера)

Я пытаюсь разделить один столбец на другой внутри функции:

lcontrib=lcontrib_lev.div(lcontrib_lev['base'],axis='index') 

Как можно видеть, я делясь на столбец в DataFrame, но я получаю довольно странную ошибку:

 ValueError: putmask: mask and data must be the same size 

Должен признаться, это первый раз, когда я видел эту ошибку. Кажется, что DF и столбец имеют разную длину, но ясно (поскольку столбец исходит из DataFrame), они не являются.

Еще одним поворотным моментом является то, что я использую эту функцию для циклирования процедуры управления данными по конкретным годам наборам (данные взяты из однотипных переписей занятости и заработной платы в бета-серии ). Наборы, связанные с периодом 1990-2000 годов, уходят без сучка и задоринки, но в 2001 году эта ошибка возникает. Я боюсь, что мне не удалось определить разницу в структуре в течение многих лет, и даже если бы я мог, как бы это объяснило несоответствие длины?

Любые мысли были бы весьма признательны.

EDIT (2/1/2014) : Спасибо, что посмотрели Том. В соответствии с запросом версия pandas 0.13.0 , и соответствующий файл данных находится здесь, на FTP-сайте BLS. Чтобы уточнить, что я подразумеваю под последовательной структурой, каждый год имеет одинаковый набор переменных и dtype (в дополнение к согласованной структуре кода данных).

EDIT (2/1/2014) : Возможно, было бы полезно разделить всю функцию:

 def qcew(f,m_dict): '''Function reads in file and captures county level aggregations with government contributions''' #Read in file cew=pd.read_csv(f) #Create string version of area fips cew['fips']=cew['area_fips'].astype(str) #Generate description variables cew['area']=cew['fips'].map(m_dict['area']) cew['industry']=cew['industry_code'].map(m_dict['industry']) cew['agglvl']=cew['agglvl_code'].map(m_dict['agglvl']) cew['own']=cew['own_code'].map(m_dict['ownership']) cew['size']=cew['size_code'].map(m_dict['size']) #Generate boolean masks lagg_mask=cew['agglvl_code']==73 lsize_mask=cew['size_code']==0 #Subset data to above specifications cew_super=cew[lagg_mask & lsize_mask] #Define column subset lsub_cols=['year','fips','area','industry_code','industry','own','annual_avg_estabs_count','annual_avg_emplvl',\ 'total_annual_wages','own_code'] #Subset to desired columns cew_sub=cew_super[lsub_cols] #Rename columns cew_sub.columns=['year','fips','cty','ind_code','industry','own','estabs','emp','tot_wages','own_code'] #Set index cew_sub.set_index(['year','fips','cty'],inplace=True) #Capture total wage base and the contributions of Federal, State, and Local cew_base=cew_sub['tot_wages'].groupby(level=['year','fips','cty']).sum() cew_fed=cew_sub[cew_sub['own_code']==1]['tot_wages'].groupby(level=['year','fips','cty']).sum() cew_st=cew_sub[cew_sub['own_code']==2]['tot_wages'].groupby(level=['year','fips','cty']).sum() cew_loc=cew_sub[cew_sub['own_code']==3]['tot_wages'].groupby(level=['year','fips','cty']).sum() #Convert to DFs for join lbase=DataFrame(cew_base).rename(columns={0:'base'}) lfed=DataFrame(cew_fed).rename(columns={0:'fed_wage'}) lstate=DataFrame(cew_st).rename(columns={0:'st_wage'}) llocal=DataFrame(cew_loc).rename(columns={0:'loc_wage'}) #Join these series lcontrib_lev=pd.concat([lbase,lfed,lstate,llocal],axis='index').fillna(0) #Diag prints print f print lcontrib_lev.head() print lcontrib_lev.describe() print '*****************************\n' #Calculate proportional contributions (failure point) lcontrib=lcontrib_lev.div(lcontrib_lev['base'],axis='index') #Group base data by year, county, and industry cew_g=cew_sub.reset_index().groupby(['year','fips','cty','ind_code','industry']).sum().reset_index() #Join contributions to joined data cew_contr=cew_g.set_index(['year','fips','cty']).join(lcontrib[['fed_wage','st_wage','loc_wage']]) return cew_contr[[x for x in cew_contr.columns if x != 'own_code']] 

Работа хорошо для меня (это на 0.13.1, но IIRC я ​​не думаю, что что-то в этой конкретной области изменилось, но, возможно, это была ошибка, которая была исправлена).

 In [48]: lcontrib_lev.div(lcontrib_lev['base'],axis='index').head() Out[48]: base fed_wage st_wage loc_wage year fips cty 2001 1000 1000 NaN NaN NaN NaN 1000 NaN NaN NaN NaN 10000 10000 NaN NaN NaN NaN 10000 NaN NaN NaN NaN 10001 10001 NaN NaN NaN NaN [5 rows x 4 columns] In [49]: lcontrib_lev.div(lcontrib_lev['base'],axis='index').tail() Out[49]: base fed_wage st_wage loc_wage year fips cty 2001 CS566 CS566 1 0.000000 0.000000 0.000000 US000 US000 1 0.022673 0.027978 0.073828 USCMS USCMS 1 0.000000 0.000000 0.000000 USMSA USMSA 1 0.000000 0.000000 0.000000 USNMS USNMS 1 0.000000 0.000000 0.000000 [5 rows x 4 columns]