python - 宽到长数据框返回 NaN 而不是浮点值
问题描述
我有一个看起来像这样的大数据框:
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
我想重塑数据,使 Country、Years 和 Values 都是列。我用了融化的方法
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,我不知道如何重塑数据框以将值保持为浮点数。
解决方案
省略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'))
将为您提供相同的输出(但不那么简洁)
推荐阅读
- android - mapping.txt 中的数字部分是什么
- java - 通过 selenium 在 paytm 主页上发起搜索的问题
- java - when an item in an out of the 2 spinner view is selected, other should be auto filled. 所有这些仅使用 assets 文件夹中的本地 json 文件
- android - 将两部分包名称重命名为三部分
- javascript - 如何通过回调发送到特定的套接字?
- python - Django:为什么我的表单发送 POST 数据但返回 request.method GET?
- reactjs - React .Net Core 不允许渲染根组件
- session - 无论 setMaxIdleTimeout 的值如何,Java WebSocket 会话都会超时
- javascript - 将参数从 Liquid 传递给 JS 函数
- c# - 图像编码为 ccitt 的 iOS pdf