如何解决系统崩溃并返回“ NoneType”对象没有属性“ isna”的错误可能是什么
我有一个使用pandas和pyqt5的python脚本,其中用户在qtableWidget中加载一个csv文件并打印包含 NaN值的记录,然后用户可以删除这些记录。 为了删除Nan值,系统通过QInputDialog接受用户输入。
当用户删除NaN值并尝试打印记录导致系统崩溃并显示以下错误时,就会发生问题:
self.display_nan.clicked.connect(lambda:self.print_df_NaN(self.df)) 文件“ f:\ AIenv \ sentiment_analysis \ qt_designer \ harak_anal_2_mainUI.py .py“,第189行,在print_df_NaN中 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,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的熊猫文档:
inplacebool,默认为False
如果为True,请就地执行操作并返回None。
这意味着该行
self.df = self.df.dropna(subset = [text],inplace=True)
有效地将self.df
设置为None
。解决方案是要么使用
self.df.dropna(subset = [text],inplace=True)
或
self.df = self.df.dropna(subset = [text],inplace=False)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。