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
Post a Comment