pandas 为什么loc[[]]对单列不起作用?

x33g5p2x  于 2023-01-24  发布在  其他
关注(0)|答案(2)|浏览(180)

在Pandas中loc函数的官方文档中,使用双括号loc 返回一个 Dataframe 。
单个元组。注意,使用返回DataFrame。www.example.comhttps://pandas.pydata.org/docs/reference/api/pandas.DataFrame.loc.html#
但是当我试图转换单个列时,这似乎不起作用。
例如,对于 Dataframe df

df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
     index=['cobra', 'viper', 'sidewinder'],
     columns=['max_speed', 'shield'])

我得到的代码结果如下

在最后一种情况下,在单列上使用双括号似乎会产生语法错误。我不明白这一点,因为使用单括号适用于单列,而使用双括号适用于单行。有人能给我解释一下为什么会发生这种情况吗?
先谢了

3yhwsihp

3yhwsihp1#

使用:选择所有行,使用[]从一列到另一列DataFrame

print (df.loc[:, ['max_speed']])
            max_speed
cobra               1
viper               4
sidewinder          7

什么是替代方案:

print (df[['max_speed']])
            max_speed
cobra               1
viper               4
sidewinder          7
ss2ws0br

ss2ws0br2#

看起来您错误地解析了.loc[['x']]的含义。双括号不是特殊的“ Dataframe 操作符”([[ 'x' ]])。而是将一个或多个行名称的列表传递到单个方括号中([ ['x'] ])。如果只传递一个参数,它将被解释为行标签,列标签被隐式设置为:(=全部),如果要将列标签设置为其他内容,需要在.loc[]中添加另一个参数,而不是在.loc[[]]中添加**,即.loc[<row_labels>, <col_labels>]。其中参数可以是列表或字符串。
根据经验,* 您传递给loc的列表数(包括快捷键:)将为您提供输出的维数 *:传递两个列表,你得到一个 Dataframe (2D)。(注意,如果你只传递一个列表,没有别的,它隐含地是[your_list, :] ==两个列表)。传递一个列表,一个字符串,你得到一个a系列(1D)。传递两个字符串,你得到一个0D对象,或者一个标量,也就是单元格中的值。

相关问题