Read excel row by row and do transpose, Python 3.6 -


i have excel file below data , want read data first column contains 'area' & transpose, again move & find column contains 'area' & transpose

in data total 3 table data given, want split & transpose. first column contains area code , other column name contains year

area    1980    1981    1982    1983 au  33.7    38.8    40.2    42.5  54.6    51.6    49.7    48.9 fi  43.2    49.6    58.8    71.1 area    1979    1980    1981    1982 au  29.8    33.7    38.8    40.2  54.2    54.6    51.6    49.7 ca  39.4    44.3    50.6    48 area    1978    1979    1980    1981 dk  58  57.2    54.5    53.2 fi  37.7    43.2    49.6    58.8 fr  41.6    49.9    55.4    58.5 

final result expected:

area    variable    value au  1980    33.7 other values 

how achieve this?

assuming have following list of dataframe's:

in [106]: dfs out[106]: [  area  1980  1981  1982  1983  0   au  33.7  38.8  40.2  42.5  1    54.6  51.6  49.7  48.9  2   fi  43.2  49.6  58.8  71.1,   area  1979  1980  1981  1982  0   au  29.8  33.7  38.8  40.2  1    54.2  54.6  51.6  49.7  2   ca  39.4  44.3  50.6  48.0,   area  1978  1979  1980  1981  0   dk  58.0  57.2  54.5  53.2  1   fi  37.7  43.2  49.6  58.8  2   fr  41.6  49.9  55.4  58.5] 

first concatenate them horizontally:

in [107]: df = pd.concat([x.set_index('area') x in dfs], axis=1)  in [108]: df out[108]:     1980  1981  1982  1983  1979  1980  1981  1982  1978  1979  1980  1981 au  33.7  38.8  40.2  42.5  29.8  33.7  38.8  40.2   nan   nan   nan   nan  54.6  51.6  49.7  48.9  54.2  54.6  51.6  49.7   nan   nan   nan   nan ca   nan   nan   nan   nan  39.4  44.3  50.6  48.0   nan   nan   nan   nan dk   nan   nan   nan   nan   nan   nan   nan   nan  58.0  57.2  54.5  53.2 fi  43.2  49.6  58.8  71.1   nan   nan   nan   nan  37.7  43.2  49.6  58.8 fr   nan   nan   nan   nan   nan   nan   nan   nan  41.6  49.9  55.4  58.5 

now can stack df , rename columns:

in [109]: df.stack().reset_index() \             .rename(columns={'level_0':'area','level_1':'variable',0:'value'}) out[109]:    area variable  value 0    au     1980   33.7 1    au     1981   38.8 2    au     1982   40.2 3    au     1983   42.5 4    au     1979   29.8 5    au     1980   33.7 6    au     1981   38.8 7    au     1982   40.2 8        1980   54.6 9        1981   51.6 10       1982   49.7 11       1983   48.9 12       1979   54.2 13       1980   54.6 14       1981   51.6 15       1982   49.7 16   ca     1979   39.4 17   ca     1980   44.3 18   ca     1981   50.6 19   ca     1982   48.0 20   dk     1978   58.0 21   dk     1979   57.2 22   dk     1980   54.5 23   dk     1981   53.2 24   fi     1980   43.2 25   fi     1981   49.6 26   fi     1982   58.8 27   fi     1983   71.1 28   fi     1978   37.7 29   fi     1979   43.2 30   fi     1980   49.6 31   fi     1981   58.8 32   fr     1978   41.6 33   fr     1979   49.9 34   fr     1980   55.4 35   fr     1981   58.5 

Comments

Popular posts from this blog

Sort a complex associative array in PHP -

vb.net - How to ignore if a cell is empty nothing -

recursion - Can every recursive algorithm be improved with dynamic programming? -