Python 熊猫何时输出系列与数据帧?
我正在做熊猫教程。它有关于Python 熊猫何时输出系列与数据帧?,python,pandas,dataframe,Python,Pandas,Dataframe,我正在做熊猫教程。它有关于castdataframe的练习,示例如下 有两个几乎相似的命令,除了一个小差异,一个输出一个序列,另一个输出一个数据帧。我不明白为什么 第一个代码是: c1 = cast[cast.title == 'The Pink Panther'] c2 = c1.groupby('year')['n'].max() type(c2) 它使c2成为一个系列。但是,如果我像下面的代码那样简单地在“n”周围添加另一个方括号,我会得到一个数据帧 c1 = cast[cast.ti
cast
dataframe的练习,示例如下
有两个几乎相似的命令,除了一个小差异,一个输出一个序列,另一个输出一个数据帧。我不明白为什么
第一个代码是:
c1 = cast[cast.title == 'The Pink Panther']
c2 = c1.groupby('year')['n'].max()
type(c2)
它使c2成为一个系列。但是,如果我像下面的代码那样简单地在“n”周围添加另一个方括号,我会得到一个数据帧
c1 = cast[cast.title == 'The Pink Panther']
c2 = c1.groupby('year')[['n']].max()
type(c2)
有人能帮我解释一下吗?谢谢 如果传递列列表,则会得到一个数据帧。列表中有多少元素并不重要。如果只是在一个项目列表的情况下返回一个序列,这将是令人困惑的,因为有时候您的列表可能是通过编程生成的。例如,假设您有:
columns_to_use = [column for blah in blahblah]
x = c1.groupby('year')[columns_to_use]
对于当前的行为,您知道
x
将始终是一个数据帧,因为columns\u to\u use
是一个列表。如果不是这样的话,您以后可能会出错,因为您无法提前知道x
是一个系列还是一个数据帧,因此您无法知道,例如,您可以在以后的代码中调用它的方法。基本上,如果您在数据帧a系列上传递getitem\uuuuuuuuu
,np.ndarray
,索引
,或列表
,然后您将返回一个数组(数据帧
)
否则,\uuu getitem\uuu
将尝试检索a列(系列
)。此案例包括StringType、数字、自定义类等
DataFrameGroupBy
的行为类似于DataFrame
,因为如果您传递前面列出的任何对象(显然还有元组),您将返回一个二维对象(DataFrame),否则它将尝试检索一维对象(系列)
在第一个代码块中,您将传递一个字符串:
>>> type(c1['year'])
pandas.core.frame.Series
在第二个代码块中,您将包含字符串的列表传递给\uuu getitem\uuu
>>> type(c1[['year']])
pandas.core.frame.DataFrame
在这种情况下,[]
有多种含义
传递一个元素的列表通常不是很有用,但是除了在顶部很好地打印列名(但是序列仍然保留name
属性中的列名)。将列表传递给\uuu getitem\uuu
的主要目的是在多个列上键入
要查看方括号[]
如何在类上工作,请检查其\uuu getitem\uuu
方法
从pandas.series.core.frame.DataFrame
:
if isinstance(key, (Series, np.ndarray, Index, list)):
# either boolean or fancy integer index
return self._getitem_array(key)
elif isinstance(key, DataFrame):
return self._getitem_frame(key)
elif is_mi_columns:
return self._getitem_multilevel(key)
else:
return self._getitem_column(key)