Python 熊猫的[]和[]有什么区别?

Python 熊猫的[]和[]有什么区别?,python,pandas,Python,Pandas,我对熊猫中索引列的结果感到困惑 两者 及 给我“varname”的列值。然而,看起来有一些细微的区别,因为db['varname']的输出显示了值的类型。第一个在df中查找特定键,一个特定列,第二个是要从df中选择的列列表,因此它返回与列表中的值匹配的所有列 另一件微妙的事情是,默认情况下,第一个将返回一个Series对象,而第二个将返回一个DataFrame,即使您传递一个包含单个项的列表 例如: In [2]: df = pd.DataFrame(columns=['VarName','An

我对熊猫中索引列的结果感到困惑

两者


给我“varname”的列值。然而,看起来有一些细微的区别,因为db['varname']的输出显示了值的类型。

第一个在df中查找特定键,一个特定列,第二个是要从df中选择的列列表,因此它返回与列表中的值匹配的所有列

另一件微妙的事情是,默认情况下,第一个将返回一个Series对象,而第二个将返回一个DataFrame,即使您传递一个包含单个项的列表

例如:

In [2]:
df = pd.DataFrame(columns=['VarName','Another','me too'])
df

Out[2]:
Empty DataFrame
Columns: [VarName, Another, me too]
Index: []

In [3]:    
print(type(df['VarName']))
print(type(df[['VarName']]))

<class 'pandas.core.series.Series'>
<class 'pandas.core.frame.DataFrame'>
但如果没有额外的[],则会引发一个KeyError:

因为您随后试图找到一个名为“VarName”的列,正如@EdChum所指出的,“other”不存在,[]将返回pandas.core.series.series,而[[]将返回pandas.core.frame.DataFrame


两者在pandas中都是不同的数据结构。

对于sklearn,最好使用具有2D形状的db[['varname']]

例如:

from sklearn.preprocessing import  KBinsDiscretizer kbinsDiscretizer  

est = KBinsDiscretizer(n_bins=3, encode='onehot-dense', strategy='uniform') 
est.fit(db[['varname']]) # where use dfb['varname'] causes error

这简直是另一个骗局,我从中得到了这个答案:,归功于@SethMMorton

在这里回答,因为这是谷歌的热门话题,我花了很长时间才得到

熊猫根本没有操作员

当您看到df[['col_name']]时,您真正看到的是:

col_name=['col_name'] df[上校姓名] 因此,[[为你做的唯一一件事就是它使 结果是一个数据帧,而不是一个序列

[在数据帧上查看参数的类型;如果是标量,则仅在一列之后,并将其作为一个系列传回;如果是列表,则必须在一组列之后,因此它仅传回包含这些列的数据帧

就这样

In [2]:
df = pd.DataFrame(columns=['VarName','Another','me too'])
df

Out[2]:
Empty DataFrame
Columns: [VarName, Another, me too]
Index: []

In [3]:    
print(type(df['VarName']))
print(type(df[['VarName']]))

<class 'pandas.core.series.Series'>
<class 'pandas.core.frame.DataFrame'>
In [4]:
df[['VarName','Another']]

Out[4]:
Empty DataFrame
Columns: [VarName, Another]
Index: []
df['VarName','Another']

KeyError: ('VarName', 'Another')
from sklearn.preprocessing import  KBinsDiscretizer kbinsDiscretizer  

est = KBinsDiscretizer(n_bins=3, encode='onehot-dense', strategy='uniform') 
est.fit(db[['varname']]) # where use dfb['varname'] causes error