Pandas 在具有混合数据类型的数据帧中分配整数值时出现问题

Pandas 在具有混合数据类型的数据帧中分配整数值时出现问题,pandas,dataframe,Pandas,Dataframe,我有一个有四列的数据框架,数据类型设置如下(向ryanjdillon致敬!) 在此阶段,df.dtypes如下所示: size int64 sum float64 mean float64 std float64 dtype: object 到目前为止很好。但是我第一次给“size”列赋值时,例如 df.loc['foo', 'size'] = 1 在本例中,它将列的数据类型翻转为float64,并将值强制转换为1.0 size float64 sum

我有一个有四列的数据框架,数据类型设置如下(向ryanjdillon致敬!)

在此阶段,df.dtypes如下所示:

size      int64
sum     float64
mean    float64
std     float64
dtype: object
到目前为止很好。但是我第一次给“size”列赋值时,例如

df.loc['foo', 'size'] = 1
在本例中,它将列的数据类型翻转为float64,并将值强制转换为1.0

size    float64
sum     float64
mean    float64
std     float64
dtype: object

这里是什么?

您没有为大小指定int值。在代码中:df['foo','size']=1表示添加另一列。你的意思是:df.loc['foo','size']=1(其中foo是索引,1表示大小)?我的错。我做了df.loc['foo','size']=1,得到了一个新行,索引为'foo','size'=1.0,所以你的问题是为什么会这样(就像引擎盖下发生的事情一样),或者如何修复它?我想两者都有一点。我发现了一些难看的解决方法(比如,在构造函数中用零初始化int列)。但是,了解引擎盖下发生的事情可能有助于我避免黑客攻击。我认为最简单的方法是在示例中使用“astype('int64')”:df['size']=df['size']。astype('int64')不为大小指定int值。在代码中:df['foo','size']=1表示添加另一列。你的意思是:df.loc['foo','size']=1(其中foo是索引,1表示大小)?我的错。我做了df.loc['foo','size']=1,得到了一个新行,索引为'foo','size'=1.0,所以你的问题是为什么会这样(就像引擎盖下发生的事情一样),或者如何修复它?我想两者都有一点。我发现了一些难看的解决方法(比如,在构造函数中用零初始化int列)。但是,了解引擎盖下发生的事情可能会帮助我避免黑客攻击。我认为最简单的方法就是在示例中使用“astype('int64'):df['size']=df['size']].astype('int64'))
size    float64
sum     float64
mean    float64
std     float64
dtype: object