首页 > 解决方案 > 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=3and patricle=74: unique_id=374(74 repeated 10 times),尽管我之前没有遇到过这个问题,并且代码可以正常工作。

感谢您提供有关如何解决此问题或规避此问题的任何建议。PS 我正在 Windows10 上 Anaconda 中最新版本的 JupyterLab 中编写我的代码,全部更新为conda update --all

标签: pythonpandasdtype

解决方案


好的,所以出于完整性考虑,我想将答案作为答案发布,而不仅仅是在评论中:

我没有仔细查看 .dat 文件,该文件末尾有两个字符串,与旧版本相比,.dat 中的字符串是新的。因此,简单地在footer参数中考虑pd.read_csv()或删除它们自然解决了将整个列转换为对象而不是 int64 的问题。


推荐阅读