为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 df 中删除 nan 而不丢失整行?

如何从 df 中删除 nan 而不丢失整行?

慕姐4208626 2022-08-02 16:15:17
G'day,如何在不丢失整行的情况下删除 nan 值?这就是我的样子。df我已经尝试了但这删除了行中的所有内容。pandasdf = schule.dropna()但我必须保持这些价值观,因为在最后,我希望它们向上发展。
查看完整描述

3 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

它可能会有所帮助。你可以尝试一下!!!!

//img1.sycdn.imooc.com//62e8dd460001d0ef08040641.jpg

查看完整回答
反对 回复 2022-08-02
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

根据问题陈述,您希望降低 nan 值的优先级,并将非 nan 值置于顶部。


import numpy as np

import pandas as pd

import functools


def drop_and_roll(col, na_position='last', fillvalue=np.nan):

    result = np.full(len(col), fillvalue, dtype=col.dtype)

    mask = col.notnull()

    N = mask.sum()

    if na_position == 'last':

        result[:N] = col.loc[mask]

    elif na_position == 'first':

        result[-N:] = col.loc[mask]

    else:

        raise ValueError('na_position {!r} unrecognized'.format(na_position))

    return result


df = pd.read_table('data', sep='\s{2,}')


print(df.apply(functools.partial(drop_and_roll, fillvalue='')))


查看完整回答
反对 回复 2022-08-02
?
慕村9548890

TA贡献1884条经验 获得超4个赞

假设您要回填值,然后删除任何列中显示的任何重复项,此示例有效:


import pandas as pd

import numpy as np


data = [

    ['POINT_1.1', 'POINT_1.2', pd.NA],

    [pd.NA, pd.NA, 'POINT_1.3'],

    ['POINT_2.1', 'POINT_2.2', pd.NA],

    [pd.NA, pd.NA, 'POINT_2.3']


]


df = pd.DataFrame(data)

df


#            0          1          2

# 0  POINT_1.1  POINT_1.2       <NA>

# 1       <NA>       <NA>  POINT_1.3

# 2  POINT_2.1  POINT_2.2       <NA>

# 3       <NA>       <NA>  POINT_2.3


t = df.T.bfill().T.bfill()

t


#            0          1          2

# 0  POINT_1.1  POINT_1.2  POINT_1.3

# 2  POINT_2.1  POINT_2.2  POINT_2.3


for column in t.columns:

    t = t.drop_duplicates(column)

t


#            0          1          2

# 0  POINT_1.1  POINT_1.2  POINT_1.3

# 2  POINT_2.1  POINT_2.2  POINT_2.3


查看完整回答
反对 回复 2022-08-02
  • 3 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信