python - 在 Pandas 中断言列数据类型

标签 python pandas dataframe assert

我试图找到一种更好的方法来断言给定数据帧的 Python/Pandas 中的列数据类型。

例如:

import pandas as pd
t = pd.DataFrame({'a':[1,2,3], 'b':[2,6,0.75], 'c':['foo','bar','beer']})

我想断言数据框中的特定列是数字的。这是我拥有的:

numeric_cols = ['a', 'b']  # These will be given
assert [x in ['int64','float'] for x in [t[y].dtype for y in numeric_cols]]

这最后一行断言感觉不是很 pythonic。也许是这样,我只是把它全部塞进一行难以阅读的内容中。有没有更好的办法?我想写这样的东西:

assert t[numeric_cols].dtype.isnumeric()

不过我似乎找不到类似的东西。

最佳答案

您可以使用 ptypes.is_numeric_dtype 来识别数字列,​​ptypes.is_string_dtype 来识别类似字符串的列,以及 ptypes.is_datetime64_any_dtype 来识别 datetime64 列:

import pandas as pd
import pandas.api.types as ptypes

t = pd.DataFrame({'a':[1,2,3], 'b':[2,6,0.75], 'c':['foo','bar','beer'],
              'd':pd.date_range('2000-1-1', periods=3)})
cols_to_check = ['a', 'b']

assert all(ptypes.is_numeric_dtype(t[col]) for col in cols_to_check)
# True
assert ptypes.is_string_dtype(t['c'])
# True
assert ptypes.is_datetime64_any_dtype(t['d'])
# True

pandas.api.types 模块(我将其别名为 ptypes)同时具有 is_datetime64_any_dtypeis_datetime64_dtype功能。区别在于它们如何处理时区感知数组:

In [239]: ptypes.is_datetime64_any_dtype(pd.DatetimeIndex([1, 2, 3], tz="US/Eastern"))
Out[239]: True

In [240]: ptypes.is_datetime64_dtype(pd.DatetimeIndex([1, 2, 3], tz="US/Eastern"))
Out[240]: False

关于python - 在 Pandas 中断言列数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28596493/

相关文章:

python - 是否有可能以某种方式内联 python 中的函数? (兼顾性能+可维护性)

python - 用python打开albumdata.xml并获取所有图片路径

python - 删除 pandas df 中的特定值和后续行

Python - 与 __contains__ 相反

python - 如何使用pyspark创建包含大量列和日期数据的数据框?

pandas - 滚动应用返回字典

Python打包: Data files are put properly in tar. gz文件但没有安装到虚拟环境

python - POST 查询访问网站上的表数据 (Python)

python - 如何使用 groupby/cut 将 Pandas DataFrame 日期分组到自定义日期范围箱中

python - 删除数据框python中的空间