如果在生成带有一些布尔列的Pandas数据帧之后,我会获得适当的列数据类型.
>>> individuals = pandas.DataFrame([[True, 1],[False, 1]],
... columns = ["female","fitness"])
...
>>> print(individuals["female"])
0 True
1 False
Name: female, dtype: bool
但是,当我通过复制已存在的行添加另一行时,会中断:
>>> individuals.loc[2] = individuals.loc[1]
>>> print(individuals["female"])
0 True
1 False
2 False
Name: female, dtype: object
对于我的“适应性”列,我改为从int64切换到float64,这也不是最优的(但稍微好一点,因为至少float64s仍然是数值数据类型,这是我后来的代码偶然发现的).有没有一种简单的方法来避免这种情况,例如.通过使用不同的方法来复制行?
解决方法:
你应该使用.append.用于有意扩展的.loc语法不会在多重类型的情况下保留dtypes.这将固定为0.15.0
In [18]: individuals.append(individuals.loc[1])
Out[18]:
female fitness
0 True 1
1 False 1
1 False 1
In [19]: individuals.append(individuals.loc[1]).dtypes
Out[19]:
female bool
fitness int64
dtype: object