你可以在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队没有位置为C或G的球员,所以这两个位置在透视表中都有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:如何通过多列进行分组和聚合