如何使用 python 显示数据框中包含 NaN 值的记录

问题描述 投票:0回答:2

我有一个在 python 中使用 pyqt5 的 GUI 界面,它创建一个窗口,允许用户加载 csv 文件并对其进行处理,打印标题并创建函数,其中一个函数是显示包含 NaN 值的记录。

当我按下此按钮时,系统崩溃并显示以下错误:

AttributeError: 'bool' object has no attribute 'isna'

GUI部分:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(QtWidgets.QWidget):
      def __init__(self, parent=None):
          QtWidgets.QWidget.__init__(self, parent=None)
          self.setObjectName("Form")
          self.setEnabled(True)
          self.resize(533, 575)
        
          self.display_nan_values = QtWidgets.QPushButton(self)
          self.display_nan_values.setObjectName("display_nan_values")
          self.display_nan_values.clicked.connect(self.print_df_NaN)
    
if __name__ == "__main__":
import sys
      app = QtWidgets.QApplication(sys.argv)
      ui = Ui_Form()
      ui.show()
      sys.exit(app.exec_())

功能代码:

   def print_df_NaN(self,df):
        print(self.df[df.isna().any(axis=1)])

这个函数的错误在哪里?

好像我在它下面写了这个函数,但这不是我想要的。

def print_df_NaN(self,df):
        print(self.df.isna())

结果是:

    event_type   date  event_city  event_location  number_person  groups
0          False  False       False           False          False   False
1          False  False       False           False          False   False
2          False  False       False           False          False   False
3          False  False       False           False          False   False
4          False  False       False           False          False   False
...          ...    ...         ...             ...            ...     ...
3377       False  False       False           False          False   False
3378       False  False       False           False          False   False
3379       False  False       False           False          False   False
3380       False  False       False           False          False   False
3381       False  False       False           False          False   False

基于答案@leminhnguyenHUST我更新了功能:

def print_df_NaN(self,df):
    def get_not_nan(self,df):
        for col in df.columns:
            df = df[~pd.isnull(df[col])]
        return df
    df1 = get_not_nan(df)
    print(df[~df.apply(tuple,1).isin(df1.apply(tuple,1))])
python dataframe nan
2个回答
1
投票

试试这个:

import numpy as np
import pandas as pd
df1 = pd.DataFrame({'movie': ['thg', 'thg', 'mol', 'mol', 'lob', 'lob'],'rating': [3., 4., 5., np.nan, np.nan, np.nan],'name': ['John','James', np.nan, np.nan, np.nan,np.nan]})

def get_nan_rows(df1):
    def get_not_nan(df):
        for col in df.columns:
            df = df[~pd.isnull(df[col])]
        return df
    df2 = get_not_nan(df1)
    return df1[~df1.apply(tuple,1).isin(df2.apply(tuple,1))]

get_nan_rows(df1)

输入:

结果:


0
投票

另一种方式:


import numpy as np
import pandas as pd
df1 = pd.DataFrame({'movie': ['thg', 'thg', 'mol', 'mol', 'lob', 'lob'],'rating': [3., 4., 5., np.nan, np.nan, np.nan],'name': ['John','James', np.nan, np.nan, np.nan,np.nan]})

mask=df1.isna().apply(lambda x :any(x),axis=1)

df1[mask]
'''
© www.soinside.com 2019 - 2024. All rights reserved.