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

2024-10-01 02:27:56 发布

您现在位置:Python中文网/ 问答频道 /正文

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

     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')

我能够做到:

    Country    Year    Total
0   Germany    2010    NaN
1   France     2010    NaN
2   Italy      2010    NaN

我的问题是浮点值变成了NaN,我不知道如何重塑数据帧以保持浮点值。你知道吗


Tags: 数据namevaluevars国家nanyearcountry
1条回答
网友
1楼 · 发布于 2024-10-01 02:27:56

省略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'))

将得到相同的输出(但不那么简洁)

相关问题 更多 >