我对pandas中的索引列的结果感到困惑。
两者都有
db['varname']
和
db[['varname']]
给我'varname‘的列值。但是,看起来有一些细微的区别,因为db['varname']
的输出显示了值的类型。
发布于 2015-11-20 04:00:00
第一个是在df中查找特定的Key
,即一个特定的列,第二个是要从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'>
所以当你传递一个列表时,它会尝试匹配所有元素:
In [4]:
df[['VarName','Another']]
Out[4]:
Empty DataFrame
Columns: [VarName, Another]
Index: []
但是如果没有额外的[]
,这将引发一个KeyError
df['VarName','Another']
KeyError: ('VarName', 'Another')
因为您随后会尝试查找一个名为:'VarName','Another'
的列,但该列并不存在
发布于 2021-04-02 09:42:23
这接近于另一个,我从它得到了这个答案:https://stackoverflow.com/a/45201532/1331446,归功于@SethMMorton。
在这里回答,因为这是谷歌上最热门的,我花了很长时间才“明白”这一点。
Pandas在所有中都没有Pandas operator。
当你看到df[['col_name']]
时,你真正看到的是:
col_names = ['col_name']
df[col_names]
因此,[[
为您做的唯一一件事就是使结果成为一个DataFrame,而不是一个Series。
DataFrame上的[
查看参数的类型;如果是标量,则您只关注一列,并将其作为系列返回;如果是列表,则您必须针对一组列,因此它返回DataFrame (仅包含这些列)。
就这样!
发布于 2017-09-29 14:59:41
正如@EdChum指出的那样,[]
将返回pandas.core.series.Series
,而[[]]
将返回pandas.core.frame.DataFrame
。
两者在pandas中都是不同的数据结构。
https://stackoverflow.com/questions/33813223
复制相似问题