【发布时间】:2021-08-11 13:29:10
【问题描述】:
我正在使用 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 和patricle=74:unique_id=374(74 repeated 10 times),虽然我之前没有遇到这个问题,并且代码运行没有问题。
感谢您提供有关如何解决或规避此问题的任何建议。
附言我正在 Windows10 上 Anaconda 中最新版本的 JupyterLab 中编写我的代码,所有这些都更新为 conda update --all
【问题讨论】:
-
分享 csv,以便我们了解
pid可能出现的问题 -
是的,这很好。由于@Corralien 的回答,我已经发现了错误,即这个 .dat 文件中有一个页脚,我不知道它在那里,我忘了看最明显的地方,只看了“射弹” .head()´
-
你有没有试过在你读完之后改变它。也许像这样
recoil['pid'] = recoil.pid.astype('int32') -
嘿@j__carlson,是的,我有,但没有奏效,不幸的是,Corralien 在我回复的地方删除了他的答案。答案是在新的 .dat 文件版本中,有一个仅影响第一列的页脚,因为底部有文本。通过在“read_csv”中设置页脚参数来删除它们或对其进行说明是有效的。所以这是我过于关注“x.head()”而不是整个数据集的问题。