Python Pandas 下降

Python Pandas drop

我使用 Python 构建脚本并使用 Pandas。 我正在尝试从数据框中删除行。 我想将包含空值的行删除到两个特定的列中。 如果这两列中的一列定期完成但另一列没有完成,则保留该行。 所以我构建了这段有效的代码。但我是初学者,我相信我可以简化我的工作。 我确定我的函数中不需要循环“for”。我认为有一个很好的方法。我在互联网上阅读了文档,但一无所获。 我尽力而为,但我需要帮助。 另外出于某些原因我不想使用 numpy。

所以这是我的代码:

import pandas as pnd


def drop_empty_line(df):
    a = df[(df["B"].isna()) & (df["C"].isna())].index
    for i in a:
        df = df.drop([i])
    return df
    
    
def main():
    df = pnd.DataFrame({
            "A": [5, 0, 4, 6, 5], 
            "B": [pnd.NA, 4, pnd.NA, pnd.NA, 5], 
            "C": [pnd.NA, pnd.NA, 9, pnd.NA, 8], 
            "D": [5, 3, 8, 5, 2], 
            "E": [pnd.NA, 4, 2, 0, 3]
            })
    
    print(drop_empty_line(df))
    
    
if __name__ == '__main__':
    main()

你确实不需要循环。你甚至不需要自定义函数,已经有 dropna:

df = df.dropna(subset=['B', 'C'], how='all')
# or in place:
# df.dropna(subset=['B', 'C'], how='all', inplace=True)

输出:

   A     B     C  D  E
1  0     4  <NA>  3  4
2  4  <NA>     9  8  2
4  5     5     8  2  3