我需要对熊猫数据框中的每一列应用一个函数,该函数在每一列中都包含NaN计数。说我有这个数据框:
import pandas as pd
df = pd.DataFrame({'Baseball': [3, 1, 2], 'Soccer': [1, 6, 7], 'Rugby': [8, 7, None]})
Baseball Soccer Rugby
0 3 1 8.0
1 1 6 7.0
2 2 7 NaN
我可以使用以下方法获取每列中的NaN计数:
df.isnull().sum()
Baseball 0
Soccer 0
Rugby 1
但是我无法弄清楚如何使用该结果将函数应用于每个列。举个例子,我想将一列中的NaN数添加到该列中的每个元素以获得:
Baseball Soccer Rugby
0 3 1 9.0
1 1 6 8.0
2 2 7 NaN
(我的实际功能更复杂。)我尝试过:
def f(x, y):
return x + y
df2 = df.apply(lambda x: f(x, df.isnull().sum()))
然后我就彻底被弄糊涂了:
Baseball Soccer Rugby
0 NaN NaN NaN
1 NaN NaN NaN
2 NaN NaN NaN
Baseball NaN NaN NaN
Rugby NaN NaN NaN
Soccer NaN NaN NaN
有人知道如何在应用于每一列的函数中使用每一列中的NaN计数吗?
谢谢!
答案 0 :(得分:0)
感谢Datanovice和vb_rises,答案是:
df.apply(lambda x : x + df.isnull().sum(), axis=1)
如果有人有类似的问题,我希望答案是明确的,而无需通读注释。我曾以为Pandas中的axis = 1(列方向)是默认设置,但似乎并非所有方法都如此。
答案 1 :(得分:0)
我更喜欢@ALollz的答案; df.add(df.isnull().sum())
。
lambda函数@Dribbler定义的形式已经以.add()
的形式存在。