[英]Get the amount of leading NaN and trailing non NaN values in pandas dataframe
我有一个 dataframe,其中行包含 NaN 值。 df 包含原始列,即Heading 1 Heading 2 和 Heading 3以及名为Unnamed: 1 Unnamed: 2 和 Unnamed: 3的额外列,如图所示:
标题 1 | 标题 2 | 标题 3 | 未命名:1 | 未命名:2 | 未命名:3 |
---|---|---|---|---|---|
钠盐 | 34 | 24 | 45 | 钠盐 | 钠盐 |
钠盐 | 钠盐 | 24 | 45 | 11 | 钠盐 |
钠盐 | 钠盐 | 钠盐 | 45 | 45 | 33 |
4个 | 钠盐 | 24 | 钠盐 | 钠盐 | 钠盐 |
钠盐 | 钠盐 | 4个 | 钠盐 | 钠盐 | 钠盐 |
钠盐 | 34 | 24 | 钠盐 | 钠盐 | 钠盐 |
22 | 34 | 24 | 钠盐 | 钠盐 | 钠盐 |
钠盐 | 34 | 钠盐 | 45 | 钠盐 | 钠盐 |
我想遍历每一行并找出原始列(标题 1 标题 2 和标题 3)中前导 NaN 值的数量以及额外列中非 NaN 值的数量(未命名:1 未命名:2 和未命名:3 ) 。 对于每一行,这应该被计算并在字典中返回,其中键是行的索引,该键的值是一个列表,其中包含原始列中前导 NaN 值的数量(标题 1 标题 2 和标题 3 ) 和列表的第二个元素是额外列中非 NaN 值的数量(未命名:1 未命名:2 和未命名:3)。
所以上面 dataframe 的结果是:
{0 : [1, 1],
1 : [2, 2],
2 : [3, 3],
3 : [0, 0],
4 : [2, 0],
5 : [1, 0],
6 : [0, 0],
7 : [1, 1]}
请注意在第 3 行和第 7 行中,原始列分别包含 1 和 2 个 NaN,但只计算前导 NaN,而不计算中间的 NaN!
谢谢!
作为备选:
df['Count'] = df[['Heading 1', 'Heading 2']].apply(lambda x: sum(x.isnull()), axis=1)
df['Count2'] = df[['Unnamed: 1', 'Unnamed: 2']].apply(lambda x: sum(x.notnull()), axis=1)
df['total']=df[['Count','Count2']].values.tolist()
output=dict(zip(df.index, df.total))
'''
{0: [1, 1], 1: [2, 1], 2: [1, 0], 3: [0, 0], 4: [2, 2], 5: [2, 1]}
'''
要么
mask=list(map(list, zip(df[['Heading 1', 'Heading 2']].isnull().sum(axis=1), df[['Unnamed: 1', 'Unnamed: 2']].notnull().sum(axis=1))))
output=dict(zip(df.index,mask))
#{0: [1, 1], 1: [2, 1], 2: [1, 0], 3: [0, 0], 4: [2, 2], 5: [2, 1]}
.isna()
(在Cyzanfar 的回答中)为我提出了一个例外:
AttributeError: 'numpy.float64' object has no attribute 'isna'
您可以改为尝试以下操作:
counts = {}
for index, row in df.iterrows():
# Count the number of NaN values in the original columns
num_nan_orig = np.sum(np.isnan(row[['Heading 1', 'Heading 2']]))
# Count the number of non-NaN values in the extra columns
num_non_nan_extra = np.sum(~np.isnan(row[['Unnamed: 1', 'Unnamed: 2']]))
counts[index] = [num_nan_orig, num_non_nan_extra]
print(counts)
输出如下:
# {0: [1, 1], 1: [2, 1], 2: [1, 0], 3: [0, 0], 4: [2, 2], 5: [2, 1]}
~运算符(代码中的倒数第三行)是 Python 中的按位取反运算符,它反转其操作数的 boolean 值。 在这种情况下,它会反转 np.isnan() 方法生成的 boolean 值,以便可以计算非 NaN 值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.