在对某些数据进行预处理和训练模型之前,我想检查数据帧的每个特征(每列)是否具有正确的数据类型。即,如果数据框有列col1
,col2
,col3
,则它们应分别具有类型int
,float
,string
,因为我已定义他们(col1
不能属于string
,订单很重要。
如果
,最好的方法是什么?像
这样的东西types = df.dtypes # returns a pandas series
if types != correct_types:
raise TypeError("Some of the columns do not have the correct type")
其中correct_types
是每列的已知数据类型 - 这些类型必须与types
的顺序相同,以确保每个列类型都正确匹配。知道哪一列抛出错误也是一件好事(所以也许在列上使用for循环更合适?)
有没有办法实现这一目标,如果是这样,实现这一目标的最佳方法是什么?也许我正在以错误的方式查看问题 - 更一般地说,我如何确保df
的列具有正确的数据类型?
答案 0 :(得分:1)
您可以使用pd.DataFrame.dtypes
将系列映射列名称返回到数据类型:
df = pd.DataFrame([[1, True, 'dsfasd', 51.314],
[51, False, '56345', 56.1234]],
columns=['col1', 'col2', 'col3', 'col4'])
res = df.dtypes
print(res)
col1 int64
col2 bool
col3 object
col4 float64
dtype: object
本系列的值为dtype
个对象:
print(res.iloc[0])
dtype('int64')
作为一个系列,您可以按索引或按值进行过滤。例如,要过滤int64
类型:
print(res[res == np.dtype('int64')])
col1 int64
dtype: object
您还可以通过series1 == series2
将系列与另一系列进行比较,以创建布尔系列映射。用自己检查系列的一个简单示例:
# in reality, you will check res versus a custom series_valid
print(res == res)
col1 True
col2 True
col3 True
col4 True
dtype: bool
如果您的比较中的任何值为False
,则可能会出现错误:
if (res != series_valid).any():
indices = (res != series_valid).index.tolist()
raise TypeError("Some columns have incorrect type: {0}".format(indices))