为什么分配到具有loc和切片的数据框与使用单个列不同?

时间:2016-11-29 01:14:32

标签: python pandas

我试图将列从float更新为int。在以下两种情况下考虑df

df = pd.DataFrame(dict(A=[1.1, 2], B=[1., 2]))
print(df.A.dtype)

df.loc[:, ['A']] = df[['A']].astype(int)
print(df.A.dtype)
df

enter image description here

dtype无法更新为int,但'A'中的值肯定会被截断。

然而,

df = pd.DataFrame(dict(A=[1.1, 2], B=[1., 2]))
print(df.A.dtype)

df.loc[:, 'A'] = df.A.astype(int)
print(df.A.dtype)
df

enter image description here

工作正常。

这些表现方式有不同的理由吗?

1 个答案:

答案 0 :(得分:1)

documentation开始:

  

注意尝试将列的子集转换为指定的类型时   使用astype()和loc(),会发生向上转换。 loc()试图适应什么   我们分配给当前的dtypes,而[]将覆盖它们   从右手边拿dtype。因此如下   一段代码产生了意想不到的结果。