我试图将列从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
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
工作正常。
这些表现方式有不同的理由吗?
答案 0 :(得分:1)
从documentation开始:
注意尝试将列的子集转换为指定的类型时 使用astype()和loc(),会发生向上转换。 loc()试图适应什么 我们分配给当前的dtypes,而[]将覆盖它们 从右手边拿dtype。因此如下 一段代码产生了意想不到的结果。