Pytho 笔记:Pandas函数pivot_table和groupby默认删除含有空值的行

这是一个早在2013年就被发现的一个小问题:即pandas.pivot_table()index里边含有空值的,空值的对应透视数据会被忽略。

使用pd.fillna()

import pandas
import numpy

a = [['a', 'b', 12, 12, 12], ['a', numpy.nan, 12.3, 233., 12], ['b', 'a', 123.23, 123, 1], ['a', 'b', 1, 1, 1.]]

df = pandas.DataFrame(a, columns=['a', 'b', 'c', 'd', 'e'])
df_pivot = df.pivot_table(index=['a', 'b'], values=['c', 'd', 'e'], aggfunc=sum)

print(df)
# df如下
   a    b       c    d   e
0  a    b   12.00   12  12
1  a  NaN   12.30  233  12
2  b    a  123.23  123   1
3  a    b    1.00    1   1

print(df_pivot)
# df_pivot如下
          c    d   e
a b                 
a b   13.00   13  13  # [a NaN 12.30 233 12] 默认删除不计
b a  123.23  123   1

解决方法:使用df.fillna(‘string’)把空值出填充个字符串就OK了。例如(原文链接点击这里

In [31]: df2 = df.copy()
In [32]: df2['dummy'] = np.nan
In [33]: df2['b'] = df2['b'].fillna('dummy')
In [34]: df2
Out[34]: 
       a      b       c    d   e  dummy
    0  a      b   12.00   12  12    NaN
    1  a  dummy   12.30  233  12    NaN
    2  b      a  123.23  123   1    NaN
    3  a      b    1.00    1   1    NaN

# 此处,之前被删除的那一行的值又回来了
In [35]: df2.pivot_table(index=['a', 'b'], values=['c', 'd', 'e'], aggfunc=sum)
Out[35]: 
               c      d     e
a b                         
a b       13.00   13.0  13.0
  dummy   12.30  233.0  12.0
b a      123.23  123.0   1.0

In [36]: df2.pivot_table(index=['a', 'b'], values=['c', 'd', 'e'], aggfunc=sum).replace('dummy',np.nan)
Out[36]: 
               c      d     e
a b                         
a b       13.00    13.0   13.0
  nan     12.30   233.0   12.0
b a      123.23   123.0    1.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值