在PyQt5中使用Pandas时的几个坑
最近在看Python GUI编程,在用到PyQt5+Pandas时遇到一些问题。这里把问题和解决方法整理一下。备查。
(好像不能上传附件,内容只好写在下面了。)
在PyQt5中使用Pandas时的几个坑
在PyQt5中使用Pandas时需要的模块库为:qtpandas,版本为1.0.4以上,才支持PyQt5。安装过程不说了,找各种方法安装吧。
安装完成后,为检测是否安装成功,运行qtpands提供的例子:BasicExample.py,过程中暴露出很多问题。
1. 无法从pandas.tslib中加载NaTType
报错模块:EditDialogs.py
模块位置:<安装目录>\Anaconda3\lib\site-packages\qtpandas-1.0.4-py3.7.egg\qtpandas\views
报错语句:from pandas.tslib import NaTType
修复方法:
从网上找到了一种方法,有效。修改报错语句为:from pandas._libs.lib import *
2. 'DataFrame' object has no attribute 'ix'
在解决上面的错误后,运行例子,并显示初始界面,但在加载数据的过程中报错。
错误信息:'DataFrame' object has no attribute 'ix'
报错模块:DataFrameModel.py
模块位置:<安装位置>\Anaconda3\lib\site-packages\qtpandas-1.0.4-py3.7.egg\qtpandas\models
报错语句:凡在对DataFrame的操作中使用了“.ix[row_index, column_index]”或类似操作的,多处。
修复方法:
猜测该错误的原因可以是qtpandas的Pandas新、旧版本之间不兼容,我使用的Pandas版本为1.0.1,已经不支持“ix”了。跟踪发现,此时row_index为整型数据,column_index为字符串数据,所以将所有使用“.ix”的地方修改为“.loc”,问题解决。
3. <class 'ValueError'>
上面问题解决后,继续运行例子,在向DataFrame添加新的列时,列名称填写“d”(应该可以任意),列的数据类型选择“datetime”类型,注意:没有填写默认值,然后在点击“OK”时,报错。
错误信息:Location based indexing can only have [integer, integer slice (START point is INCLUDED, END point is EXCLUDED), listlike of integers, boolean array] types (大意是:基于位置的索引只能有[integer,integer 切片(包括起点,不包括终点),listlike of integers,boolean array]类型)
报错模块:DataFrameModel.py
模块位置:<安装位置>\Anaconda3\lib\site-packages\qtpandas-1.0.4-py3.7.egg\qtpandas\models
报错语句:int(self._dataFrame.iloc[row, col])
修复方法:将出错的语句改为:int(self._dataFrame.loc[row, col]),即使用“loc”替换“iloc”
4. name 'NaTType' is not defined
第1个问题是import语句加载模块库时报错,这个错误则是在运行时报错。
错误信息:name 'NaTType' is not defined
报错模块:EditDialogs.py
模块位置:<安装位置>\Anaconda3\lib\site-packages\qtpandas-1.0.4-py3.7.egg\qtpandas\views
报错语句:if isinstance(defaultValue, NaTType):
修复方法:
问题的原因还是qtpandas的版本1.0.4与pandas的版本(1.0.1)不匹配造成的,具体原因是qtpandas使用的是0.2.0的pandas,而官方文档说明在pandas 0.2.0以后的版本,对于“NaTType”不再支持,应改为type(pandas.NaT)。按这个说法,将上面报错的语句修改为if isinstance(defaultValue, type(pandas.NaT)):,同时在该模块的顶部添加:import pandas。
5. 'DataFrame' object has no attribute 'set_value'
在解决上面的问题后,再运行例子,添加datetime类型的列正常(其他数据类型未测试),添加的列正确显示在界面的“表格”中,同时新添加的列的各行数据被赋予“2000-01-01”的默认值。
此时,双击新添加的列对应的值,“表格”中出现一个SpinBox,方便对日期进行调整。调整后,或不做任何调整,鼠标在其他地方单击,则报这个错误。
错误信息:'DataFrame' object has no attribute 'set_value'
报错模块:DataFrameModel.py
模块位置:\Anaconda3\lib\site-packages\qtpandas-1.0.4-py3.7.egg\qtpandas\models
报错语句:self._dataFrame.set_value(row, col, value)
修复方法:
原因是DataFram类中没有“set_value()”方法。
根据Stack Overflow网站介绍的方法,将出错的语句修改为:self._dataFrame.at[row, col] = value
运行不报错,且结果也正确。
总结
总的感觉是这个版本的qtpandas_1.0.4存在许多问题,而且几乎所有问题都是qtpandas与pandas版本不匹配造成的。不想一一检查qtpandas各个模块的所有语句,只有按上面的思路、方法,发现一个问题,解决一个问题吧。
在PyQt5中使用Pandas时的几个坑的更多相关文章
- 在Pycharm中使用Pandas时输出结果中列被省略的解决办法
在使用pycharm学习pandas的过程中我发现好多时候会发生不能输出所有列的情况,上网搜了一下,发现解决的办法是使用一个输出控制的函数. 在下面的代码中我们只是输出starbucks_store_ ...
- 记录在vue中使用jsx时踩过的坑
使用方法及细节就不一一说了. 1.给input或者textarea绑定value时,出现失效的问题.解决方法:https://github.com/vuejs/babel-plugin-transfo ...
- PyQt5中的信号与槽,js 与 Qt 对象之间互相调用
一.PyQt中的信号与槽 信号(Signal)和槽(Slot)是Qt中的核心机制,用在对象之间互相通信.在Qt中每个QObject对象和PyQt中所有继承自QWidget的控件(这些都是QObject ...
- 在php中定义常量时,const与define的区别?
问]在php中定义常量时,const与define的区别? [答]使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数.另外const在编译时要比define快很 ...
- AndRodi Strudio中的按钮时件
AndRodi Studio中的按钮时件注册一定要写在onCraete中 @Override protected void onCreate(Bundle savedInstanceState) { ...
- 在MySQL向表中插入中文时,出现:incorrect string value 错误
在MySQL向表中插入中文时,出现:incorrect string value 错误,是由于字符集不支持中文.解决办法是将字符集改为GBK,或UTF-8. 一.修改数据库的默认字符集 ...
- Android Tips: 在给drawable中添加图片资源时,文件名必须全小写
在给drawable中添加图片资源时,文件名必须全小写
- 在查询时将查询条件放入Session中,导出时直接根据qpniRGaFiler取查询条件即可
在查询时将查询条件放入Session中,导出时直接根据qpniRGaFiler取查询条件即可
- 使用ueditor中的setContent() 时经常报innerHtml错误(笔记)
1)今天遇到个问题,使用ueditor中的setContent() 时经常报innerHtml错误:网上找了下解决方案:发现这个可以用: 不能创建editor之后马上使用ueditor.setCont ...
随机推荐
- NC15052 求最值
NC15052 求最值 题目 题目描述 给你一个长为 \(n\) 的序列 \(a\) 定义 \(f(i,j)=(i-j)^2+g(i,j)^2\) \(g\) 是这样的一个函数 求最小的 \(f(i, ...
- 数学公式 Latex 练习
\[1+x+x^2+x^3+\cdots=\frac{1}{1-x}\quad x\in(-1, 1) \] 证明:设左边式子项数为 \(n\) 那么可以得到: \[\begin{split} S & ...
- Solution -「2021.11.27」\Infty
T1. 显然往 \(x < 0, y < 0\) 的点走一定不优. 根据转移式可发现 \(C(x, y)\) 即从 \((0, 0)\) 走到 \((x, y)\) 的方案数 \(\dbi ...
- 应用启动加速-并发初始化spring bean
背景 随着需求的不断迭代,服务承载的内容越来越多,依赖越来越多,导致服务启动慢,从最开始的2min以内增长到5min,导致服务发布很慢,严重影响开发效率,以及线上问题的修复速度.所以需要进行启动加速. ...
- AtCoder Beginner Contest 261E // 按位思考 + dp
题目链接:E - Many Operations (atcoder.jp) 题意: 给定一个数x,以及n个操作(ti,ai): 当 t = 1 时,将 x & a 当 t = 2 时,将 x ...
- PostGresql listen与notify命令
LISTEN与NOTIFY命令 PostgreSQL提供了client端和其他client端通过服务器端进行消息通信的机制.这种机制 是通过LISTEN和NOTIFY命令来完成的. 1.LISTEN与 ...
- JavaWeb--Cookie与Session
前言 Java Web 其实就是一个技术的总和,把Web看成一个容器而已主要使用JavaEE技术来实现.在加上各种中间件. 整个javaWeb阶段的内容通过实际的案例贯穿学习, 所涉及到的技术知识点会 ...
- 一文带你弄懂 CDN 技术的原理
对于 CDN 这个东西,相信大家都有耳闻,感觉既陌生但又熟悉.最近深入了解了一下 CDN,这才发现原来 CDN 如此重要!今天就跟大家科普一下 CDN 是什么,以及为啥要有 CDN,最后再讲一下 CD ...
- Babylon.js 入门简介和开发实例
Babylon.js是一款WebGL开发框架,和Three.js类似. Three.js是由社区推动的,比Babylon.js要成熟些,而Babylon.js是微软推动的,和微软的相关技术结合更好. ...
- 个人学习记录-Cpp基础-成员初始化列表
Translator Translator 参考链接: https://blog.csdn.net/XIONGXING_xx/article/details/115553291http ...