【发布时间】:2020-03-10 12:40:02
【问题描述】:
是否有可能在应用应用函数的对象的数据类型中工作? 据我了解,dtype 已更改。
请参阅以下 MWE。这个结果不是我想要达到的。
import pandas as pd
ds_a = pd.Series([True,False,True])
ds_b = ds_a.apply(lambda x: ~x)
print(ds_a.dtype == ds_b.dtype)
print(ds_b.dtype)
结果:
False
int64
ds_b 应该与ds_a 具有相同的数据类型(布尔值)。我对如何防止任何数据类型更改感兴趣。
编辑:对于我的用例来说,这是一个更好的 MWE。
请参阅以下(新)MWE。
import pandas as pd
ds_a = pd.Series([True,False,True,True,True,False])
ds_mask = pd.Series([True,False])
func = lambda x: pd.np.all(x==ds_mask)
ds_b = ds_a.rolling(len(ds_mask)).apply(func, raw=True)
print(a(ds_a[:2]).dtype)
print(ds_b.dtype)
结果:
dtype('bool')
float64
【问题讨论】:
-
stackoverflow.com/questions/52078594/…这个问题不回答我的问题
-
您是否有意进行按位补码而不是逻辑
not?按位补码将布尔值视为整数 0 和 1。然后,它采用这些值的按位补码。所以~False = -1和~True = -2。这导致它们被转换为int64。 -
在上述情况下,将值转换回
bool(如下所示)将导致ds_b的所有值成为True,因为True的补码~和False或1和0将始终为非零值。 -
@JamesMchugh 你是对的。我必须检查这是否适用于我的真正问题。
-
@JamesMchugh 我做了一个更好的 MWE
标签: python pandas boolean series