May*_*wal 6 python boolean dataframe pandas
考虑df
:
In [2098]: df = pd.DataFrame({'a': [1,2], 'b':[3,4]})
In [2099]: df
Out[2099]:
a b
0 1 3
1 2 4
Run Code Online (Sandbox Code Playgroud)
现在,我尝试将一个list
值附加到df
:
In [2102]: df.loc[2] = [3, 4]
In [2103]: df
Out[2103]:
a b
0 1 3
1 2 4
2 3 4
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都很好。
但是现在当我尝试添加带有布尔值列表的行时,它会将其转换为int
:
In [2104]: df.loc[3] = [True, False]
In [2105]: df
Out[2105]:
a b
0 1 3
1 2 4
2 3 4
3 1 0
Run Code Online (Sandbox Code Playgroud)
我知道我可以将其转换df
为str
然后附加布尔值,例如:
In [2131]: df = df.astype(str)
In [2133]: df.loc[3] = [True, False]
In [2134]: df
Out[2134]:
a b
0 1 3
1 2 4
3 True False
Run Code Online (Sandbox Code Playgroud)
但是,我想知道这种行为背后的原因。为什么当我附加到它时它不会自动将dtypes
列更改为?object
boolean
我的熊猫版本是:
In [2150]: pd.__version__
Out[2150]: '1.1.0'
Run Code Online (Sandbox Code Playgroud)
因为类型正在向上转换(请参阅upcasting),来自文档:
当与其他类型组合时,类型可能会被向上转型,这意味着它们从当前类型升级(例如 int 到 float)。
向上转换根据numpy 规则进行:
向上转型始终遵循 numpy 规则。如果一项操作涉及两种不同的数据类型,则将使用更通用的一种作为操作的结果。
要了解如何应用numpy 规则,您可以使用函数find_common_type,如下所示:
res = np.find_common_type([bool, np.bool], [np.int32, np.int64])
print(res)
Run Code Online (Sandbox Code Playgroud)
输出
int64
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
349 次 |
最近记录: |