系统崩溃并返回"NoneType"对象没有属性"isna"的错误可能是什么



我有一个使用panda和pyqt5的python脚本,其中用户在qtableWidget中加载csv文件,并打印包含NaN值的记录,然后用户可以删除这些记录。为了降低Nan值,系统通过QInputDialog获取用户输入。

当用户删除NaN值并尝试打印记录时,系统崩溃并显示以下错误时,就会出现问题:

self.display_nan.cacked.connect(lambda:self.print_df_NaNaNa(self.df((文件";f: \AEnv\sensement_analysis\qt_designer\harak_anal_2_mainUI.pypy";,第189行,在print_df_NaNa中print(self.df[df.isna((.any(axis=1(](AttributeError:"NoneType"对象没有属性"isna">

代码:

from PyQt5 import QtCore, QtGui, QtWidgets
import pandas as pd
from PandasModel import PandasModel
import seaborn as sns
import cufflinks as cf
import plotly
import plotly.offline as py
import plotly.express as px 
import plotly.graph_objs as go
from plotly.offline.offline import iplot
from PyQt5.QtWidgets import QInputDialog, QLineEdit
cf.go_offline()
cf.set_config_file(offline=False, world_readable=True)
class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent=None)


self.loadBtn = QtWidgets.QPushButton("Select File", self)
self.loadBtn.clicked.connect(self.loadFile)
self.display_nan = QtWidgets.QPushButton("Display  NaN Values", self)
self.display_nan.clicked.connect(lambda: self.print_df_NaN(self.df))
self.gridLayout.addWidget(self.display_nan, 3, 0, 1, 1)

self.drop_nan_value = QtWidgets.QPushButton("drop  NaN Values", self)
self.drop_nan_value.clicked.connect(lambda: self.getText())

self.pandasTv = QtWidgets.QTableView(self)
self.verticalLayout.addWidget(self.pandasTv)
def loadFile(self):
fileName, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Open File", "", "CSV Files (*.csv)");
self.pathLE.setText(fileName)
df = pd.read_csv(fileName)
model = PandasModel(df)
self.pandasTv.setModel(model)
self.df = df

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

def getText(self):
text, okPressed = QInputDialog.getText(self, "select the column to drop NaN","column name:", QLineEdit.Normal, "")
if okPressed and text != '':
print(text)
self.df = self.df.dropna(subset = [text] , inplace=True)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())


来自DataFrame.dropna:的Panda文档

inplacebool,默认错误

如果为True,请就地执行操作并返回None。

这意味着行

self.df = self.df.dropna(subset = [text] , inplace=True)

有效地将CCD_ 1设置为CCD_。解决方案是使用

self.df.dropna(subset = [text] , inplace=True)

self.df = self.df.dropna(subset = [text] , inplace=False)

最新更新