宽到长数据帧返回NaN而不是浮点值

时间:2018-10-17 04:29:48

标签: python dataframe reshape

我有一个看起来像这样的大数据框:

node console

我想重塑数据,以便“国家/地区”,“年份”和“值”均为列。我用了融化法

     Country    2010         2011        2012         2013
0    Germany    4.625e+10    4.814e+10   4.625e+10    4.593e+10
1    France     6.178e+10    6.460e+10   6.003e+10    6.241e+10
2    Italy      4.625e+10    4.625e+10   4.625e+10    4.625e+10

我能够达到:

dftotal = pd.melt(dftotal, id_vars='Country', 
              value_vars=[2010,2011,2012,2013,2014,2015,2016,2016,2017], 
              var_name ='Year', value_name='Total')

我的问题是浮点值变成NaN,我不怎么改变数据框的形状以保持浮点值。

1 个答案:

答案 0 :(得分:0)

省略value_vars参数,它会起作用:

pd.melt(dftotal, id_vars='Country', var_name ='Year', value_name='Total')

    Country  Year         Total
0   Germany  2010  4.625000e+10
1    France  2010  6.178000e+10
2     Italy  2010  4.625000e+10
3   Germany  2011  4.814000e+10
4    France  2011  6.460000e+10
5     Italy  2011  4.625000e+10
6   Germany  2012  4.625000e+10
7    France  2012  6.003000e+10
8     Italy  2012  4.625000e+10
9   Germany  2013  4.593000e+10
10   France  2013  6.241000e+10
11    Italy  2013  4.625000e+10

问题可能是您的列名不是ints而是字符串,所以您可以这样做:

dftotal = pd.melt(dftotal, id_vars='Country', 
              value_vars=['2010','2011','2012','2013','2014','2015','2016','2016','2017'], 
              var_name ='Year', value_name='Total')

它也可以工作。

或者,使用stack

dftotal = (dftotal.set_index('Country').stack()
          .reset_index()
          .rename(columns={'level_1':'Year',0:'Total'})
          .sort_values('Year'))

将为您提供相同的输出(但不太简洁)