首页 > 解决方案 > 在时间戳或字符串列上检查 pandas df 列 dtype 时出错

问题描述

我正在检查 python pandas 数据框中所有列的数据类型。当我检查 int64 或 float64 列时,它工作正常,如下所示:

print("df['Pass'][0].dtype=",df['Pass'][0].dtype)

输出是df['Pass'][0].dtype= int64

但是,当我尝试检查应该是时间戳或字符串的列时,我会跳出我所在的try块并转到except

print("df['DATETIME'][0]=",df['DATETIME'][0])
print("df['DATETIME'][0].dtype=",df['DATETIME'][0].dtype)
....
except: 
   print("FILE CORRUPTED...")

这给了我: df['DATETIME'][0]= 2021-01-25 14:14:08.535000+00:00 FILE CORRUPTED

如果我也检查字符串列的 .dtype,我也会得到同样的错误。想法?

标签: pythonpandasdataframe

解决方案


这是因为通过 subsrpting [0],您访问的是元素类型而不是 Series 类型。

Pandas Timestamp 对象(而不是系列)没有方法/属性,dtype而 int64 具有此属性。因此你会得到错误:AttributeError: 'Timestamp' object has no attribute 'dtype'

同样,对于字符串类型的元素(而不是系列),它没有dtype属性。因此,你会得到AttributeError: 'str' object has no attribute 'dtype'

对于整数 int64 元素,它确实具有此dtype属性,您将得到例如dtype('int64')

您可以使用type()函数来获取元素类型,例如:

type(df['DATETIME'][0])

会给你: pandas._libs.tslibs.timestamps.Timestamp

这也适用于字符串、整数和浮点数(元素类型)。


推荐阅读