断言 Pandas 中的列数据类型
Asserting column(s) data type in Pandas
我正在尝试找到一种更好的方法来断言给定数据帧的 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()
不过我好像找不到类似的东西。
你可以做到
import numpy as np
numeric_dtypes = [np.dtype('int64'), np.dtype('float64')]
# or whatever types you want
assert t[numeric_cols].apply(lambda c: c.dtype).isin(numeric_dtypes).all()
您可以使用 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_dtype
和 is_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 中的列数据类型。
例如:
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()
不过我好像找不到类似的东西。
你可以做到
import numpy as np
numeric_dtypes = [np.dtype('int64'), np.dtype('float64')]
# or whatever types you want
assert t[numeric_cols].apply(lambda c: c.dtype).isin(numeric_dtypes).all()
您可以使用 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_dtype
和 is_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