我写的时候
data = pd.DataFrame(...)
data['x'] = some_value
Pandas试图变得“聪明”,并隐式地决定some_value
是“标量”并且应该广播,还是应该被视为一个序列,并且应该被分配为不广播的新列。
您在.fillna()
和.mask()
之类的功能中看到类似的检查。
Pandas使用哪种逻辑来进行此确定,并且用户可以访问和使用此逻辑吗?理想情况下,我希望能够导入和使用pandas.is_scalar()
之类的函数:
from pandas import is_scalar
assert not is_scalar([1,2,3])
assert not is_scalar({'a': 1, 'b': 2})
assert not is_scalar((3, 4))
assert is_scalar('abcdef')
assert is_scalar(None)
assert is_scalar((i for i in range(6))
此问题与What are possible pandas basic / scalar data types?不同,后者询问系列可以包含的“基本” dtype。
答案 0 :(得分:1)
此功能以pd.api.types.is_scalar
的形式存在:
from pandas.api.types import is_scalar
assert not is_scalar([1,2,3])
assert not is_scalar({'a': 1, 'b': 2})
assert not is_scalar((3, 4))
assert not is_scalar(i for i in range(6))
assert is_scalar('abcdef')
assert is_scalar(None)
assert is_scalar(123)
在文档中,这是is_scalar
返回True的所有对象的列表:
- numpy数组标量(例如np.int64)
- Python内置数字
- Python内置字节数组和字符串
- 没有
- datetime.datetime
- datetime.timedelta
- 期间
- decimal.Decimal
- 间隔
- DateOffset
- 派别
- 号码
pd.api.types
子模块还具有其他帮助程序功能,用于专门检查某些对象的类型(例如数组,字典,复数等)。