如何在pandas中用零替换数据透视表中的NaN值

424 阅读2分钟

你可以在pandas中使用fill_value参数,将数据透视表中的NaN值替换成0。

你可以使用下面的基本语法来做到这一点:

pd.pivot_table(df, values='col1', index='col2', columns='col3', fill_value=0)

下面的例子展示了如何在实践中使用这种语法。

例子:用零替换数据透视表中的NaN值

假设我们有如下的pandas DataFrame,其中包含各种篮球运动员的信息:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   'position': ['G', 'G', 'F', 'C', 'F', 'F', 'F', 'F'],
                   'points': [4, 4, 6, 8, 9, 5, 5, 12]})

#view DataFrame
print(df)

	team	position points
0	A	G	 4
1	A	G	 4
2	A	F	 6
3	A	C	 8
4	B	F	 9
5	B	F	 5
6	B	F	 5
7	B	F	 12

我们可以用下面的代码在pandas中创建一个透视表,显示DataFrame中每个球队位置的平均得分值

#create pivot table
df_pivot = pd.pivot_table(df, values='points', index='team', columns='position')

#view pivot table
print(df_pivot)

position    C     F    G
team                    
A         8.0  6.00  4.0
B         NaN  7.75  NaN

请注意,数据透视表中有两个NaN值,因为在原始DataFrame中,B队没有位置为CG的球员,所以这两个位置在透视表中都有NaN值。

为了在数据透视表中用零填充这些NaN值,我们可以使用fill_value参数:

#create pivot table with zeros instead of NaN values
df_pivot = pd.pivot_table(df, values='points', index='team', columns='position',
                          fill_value=0)

#view pivot table
print(df_pivot)

position  C     F  G
team                
A         8  6.00  4
B         0  7.75  0

注意,前一个透视表中的每一个NaN值都被填上了零。

:你可以在这里找到pandaspivot_table()函数的完整文档。

其他资源

下面的教程解释了如何在pandas中执行其他常见操作:

Pandas:如何将数据框架从长形重塑为宽形
Pandas:如何将数据框架从宽形重塑为长形
Pandas:如何通过多列进行分组和聚合