如果在生成带有一些布尔列的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

对于我的"fitness"列,我得到了一个从int64float64的切换,这也不是最优的(但稍微好一点,因为至少float64s仍然是一个数字数据类型,这是我随后的代码遇到的问题)。有没有一种简单的方法可以避免这种情况,例如使用不同的方法复制行?

最佳答案

您应该使用.append。有意扩展的.loc语法不会在多数据类型情况下保留数据类型。此值将固定为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

10-06 10:31