检查pandas中列的数据类型

2024-04-20 08:47:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个excel文件,我正在导入一个pandas数据框。在

我的数据框df

id    name    value
1      abc     22.3
2      asd     11.9
3      asw     2.4

我有一本格式为d的词典:

^{pr2}$

我想检查数据帧中列的数据类型是否与字典中定义的相同。在

输出可以是一个字符串,比如,如果所有列都有各自的数据类型

print("Success")
else:
    print(" column id has different data type.Please check your file)"

Tags: 文件数据nameidpandasdfvalue格式
3条回答

调用dtypes,转换为字典并进行比较。在

d1 = df.dtypes.astype(str).to_dict()

d1
{'id': 'int64', 'name': 'object', 'value': 'float64'}

d1 == {'name' : 'str', 'value' : 'float64', 'id' : 'int64'}
False 

不幸的是,name显示为object列,而不是{},因此{}。我可以建议您在dict上进行快速迭代,并更改str出现在object的所有条目(这应该不会造成伤害):

^{pr2}$

为了检查哪一列是不正确的,解决方案会变得更复杂一些,但是对于列表理解仍然很容易。在

[k for k in d1 if d1[k] != d2.get(k)] 
['name']

使用

In [5759]: s = df.dtypes == pd.Series(d)

In [5760]: ss = s[~s]

In [5761]: if ss.empty:
      ...:     print('sucess')
      ...: else:
      ...:     print ('columns %s have different data type' % ss.index.tolist())
      ...:
      ...:
columns ['name'] have different data type

细节

^{pr2}$

您可以将列中第一个值的type转换为str,然后比较:

d1 = {x: type(df[x].iat[0]).__name__ for x in df.columns}
print (d1)
{'name': 'str', 'id': 'int64', 'value': 'float64'}

print (d == d1)
True

相关问题 更多 >