【发布时间】:2021-04-01 20:59:18
【问题描述】:
考虑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
现在,我尝试将 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
到目前为止一切都很好。
但是现在当我尝试用布尔值列表追加一行时,它会将其转换为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
我知道我可以将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
但是,我想知道这种行为背后的原因。为什么当我将boolean 附加到它时,它不会自动将列的dtypes 更改为object?
我的熊猫版本是:
In [2150]: pd.__version__
Out[2150]: '1.1.0'
【问题讨论】:
-
'1.1.0'是我的熊猫版本。 -
在我看来,不推荐混合类型,所以它应该可以工作。如果使用
df.append(pd.Series([True, False], index=['a','b']), ignore_index=True ),同样的问题 -
@MayankPorwal 因为正如我在 Python 中所说的(不确定 pandas 和 numpy 是否相同),布尔值是整数的子类:docs.python.org/3/reference/datamodel.html#index-10
-
同意 Dani ,因为 python 布尔值是二进制整数:
1+True返回2,与添加True和False时返回二进制整数的方式相同 -
@jezrael 是的,系列也有同样的问题。
标签: python pandas dataframe boolean