检查 pandas 中列的数据类型

Shu*_*m R 4 python types dataframe pandas

我有一个 Excel 文件,我将其作为 pandas 数据框导入。

我的数据框df

id    name    value
1      abc     22.3
2      asd     11.9
3      asw     2.4
Run Code Online (Sandbox Code Playgroud)

我有一本字典d,格式为:

{ 'name' : 'str',
  'value' : 'float64',
  'id' : 'int64'}
Run Code Online (Sandbox Code Playgroud)

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

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

print("Success")
else:
    print(" column id has different data type.Please check your file)"
Run Code Online (Sandbox Code Playgroud)

cs9*_*s95 5

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

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

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

d1 == {'name' : 'str', 'value' : 'float64', 'id' : 'int64'}
False 
Run Code Online (Sandbox Code Playgroud)

不幸的是,name显示为一object列,而不是str,因此是False。我可以建议对你的字典进行快速迭代并更改str似乎的所有条目object(这应该不会造成伤害):

d2 = {k : 'object' if v == 'str' else v for k, v in d2.items()}

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

d1 == d2
True
Run Code Online (Sandbox Code Playgroud)

要检查哪些列不正确,解决方案变得更加复杂,但通过列表理解仍然很容易。

[k for k in d1 if d1[k] != d2.get(k)] 
['name']
Run Code Online (Sandbox Code Playgroud)