熊猫如何确定某物是否为“标量”?

时间:2019-06-28 17:04:42

标签: python pandas

我写的时候

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。

1 个答案:

答案 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子模块还具有其他帮助程序功能,用于专门检查某些对象的类型(例如数组,字典,复数等)。