Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么使用loc和一个slice分配给数据帧与使用单个列不同?_Python_Pandas - Fatal编程技术网

Python 为什么使用loc和一个slice分配给数据帧与使用单个列不同?

Python 为什么使用loc和一个slice分配给数据帧与使用单个列不同?,python,pandas,Python,Pandas,我尝试从浮点到int更新列。在下面两个场景中考虑 df>代码>:< /p> 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 数据类型未能更新为int,但'A'中的值肯定被截断 但是, df = pd.DataFrame(dict(A=[1.1, 2], B=[1., 2])) prin

我尝试从浮点到int更新列。在下面两个场景中考虑<代码> df>代码>:< /p>
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

数据类型未能更新为
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

很好用

这些行为有不同的理由吗?

右起:

尝试将列的子集转换为指定类型时请注意 使用astype()和loc(),将发生向上转换。loc()试图适应什么 我们正在分配给当前的数据类型,而[]将覆盖它们 从右侧获取数据类型。因此,以下 这段代码产生了意外的结果


有趣的发现。只要您的
loc
选择不涉及
[]
列,它似乎就可以工作。也就是说,
df.loc[:,'A']=df[['A']].astype(int)
的工作原理类似于
df.loc[:,'A']=df.A.astype(int)
。虽然这并不构成可靠的理由,但这些差异可能与以下事实有关:在第一种情况下,您正在更改
数据帧的数据类型,而在第二种情况下,您正在更改
系列的数据类型。如果使用“df[['a']]=df[['a']].astype(int)”,它将返回类型为int64的数据类型。。。我猜它与loc和[]函数有着详细的关系,可能也会有更好的结果,因为pandas在从数据帧赋值时将
int
升级为
float
。。。这可能是因为
系列
!=
DataFrame
。我敢说这是因为
df.loc[:,'A']
是一个
系列
,但是
df.loc[:,['A']]
是一个带有一列的
DataFrame