python - Pandas read_csv 突然将 int 作为对象读取,我无法更改它
问题描述
我正在使用 pandas 使用命令读取 .dat 文件
'recoil = pd.read_csv('partic_tran_r.dat', engine='python', skiprows=9, sep='\s+')
当我询问数据类型时,'recoil.dtypes'
我得到以下信息:
pid object
projectile object
species object
gen object
collision object
medium float64
huge float64
fluence float64
...
...
dtype: object
因此,大多数数据类型都被正确识别,但似乎突然间前五个不是。当我尝试将其修改dtype=int
为参数时,read_csv()
我只会收到错误消息ValueError: Unable to convert column pid to type <class 'int'>
。
我以前没有这个问题,我不知道现在与以前相比有什么不同。我将其设置为 int 或 float 的用例是我想创建一个唯一的 id:
projectile['unique_id'] = projectile['pid'] + projectile['projectile'] * 10
并且它正在返回pid=3
and patricle=74
: unique_id=374(74 repeated 10 times)
,尽管我之前没有遇到过这个问题,并且代码可以正常工作。
感谢您提供有关如何解决此问题或规避此问题的任何建议。PS 我正在 Windows10 上 Anaconda 中最新版本的 JupyterLab 中编写我的代码,全部更新为conda update --all
解决方案
好的,所以出于完整性考虑,我想将答案作为答案发布,而不仅仅是在评论中:
我没有仔细查看 .dat 文件,该文件末尾有两个字符串,与旧版本相比,.dat 中的字符串是新的。因此,简单地在footer
参数中考虑pd.read_csv()
或删除它们自然解决了将整个列转换为对象而不是 int64 的问题。
推荐阅读
- python - if-else 语句的动态增加
- python - 为什么 Scipy 会移除 imread、imresize 等功能?
- three.js - 如何在 THREE.js 中保持对象水平?
- http - 如何在 axios 拦截器中设置 http cookie?
- oracle - 检索主要联系人的电子邮件地址(查询无法正常工作)
- nonlinear-optimization - 正确的解决方案
- java - 如何从java编程启动zookeeper服务器
- javascript - bootstrap4-toggle jQuery 未定义
- javascript - 使用ajax jquery nodejs从数据表和mysql中删除数据时遇到问题
- php - 如何从php中的树状数据结构中获取最后一级元素?