python - 复制一行搞砸了 pandas 列数据类型,如何避免?

标签 python types pandas

如果在生成带有一些 bool 列的 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” 专栏,我改为从 int64 切换到 float64,这也不是最佳选择(但稍微好一些,因为至少 float64 仍然是数字数据类型,这是我后续代码偶然发现的)。有没有一种简单的方法可以避免这种情况,例如。通过使用不同的方法来复制行?

最佳答案

你应该使用.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

关于python - 复制一行搞砸了 pandas 列数据类型,如何避免?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25670760/

相关文章:

c# - 在 C# 中调用类型的每个实例的方法

oracle - 如何在 PL/SQL 对象类型中链接成员函数

pandas - 如果包含字符,则删除 Pandas DataFrame 行

python - 根据 Pandas 数据框中的多列值选择行

Python:Unicode 到 html 实体

python - 替换 csv 文件中的多个字符串

python - 正则表达式:如何按 "="拆分而不是按 "!="拆分

.net - 我需要将 MySQL 数据类型映射到 .net (CLR) 数据类型

python - 如何仅减去 2 个 Pandas 列中的时间(不包括日期)?

python - 如何删除矩阵中的重复值?