pau*_*f11 4 python series dataframe pandas
我已经注意到单列数据帧几次令人懊恼(下面的例子); 但在大多数其他情况下,单列数据框只是一个系列.有关为什么会返回一列DF的任何押韵或理由吗?
例子:
1)通过布尔掩码索引列时掩码只有一个真值:
df = pd.DataFrame([list('abc'), list('def')], columns = ['foo', 'bar', 'tar'])
mask = [False, True, False]
type(df.ix[:,mask])
Run Code Online (Sandbox Code Playgroud)
2)在DataFrame上设置索引时,只有两列开头:
df = pd.DataFrame([list('ab'), list('de'), list('fg')], columns = ['foo', 'bar']
type(df.set_index('foo'))
Run Code Online (Sandbox Code Playgroud)
我觉得如果我期待只有一列的DF,我可以通过调用来处理它
pd.Series(df.values().ravel(), index = df.index)
Run Code Online (Sandbox Code Playgroud)
但在大多数其他情况下,单列数据框只是一个系列.有关为什么会返回一列DF的任何押韵或理由吗?
通常,当操作可以返回多列DataFrame时,将返回单列DataFrame.例如,当您使用布尔列索引时,如果有多个True值,则必须返回多列DataFrame,因此即使只有一列,也将始终返回DataFrame.同样,在设置索引时,如果您的DataFrame有两列以上,那么在为索引删除一个后,结果仍然必须是DataFrame,因此即使它只剩下一列,它仍然是一个DataFrame.
相反,如果您执行类似操作df.ix[:,'col'],则会返回一个Series,因为无法将一个列名传递给select可以选择多个列.
我们的想法是,执行操作有时不应该返回DataFrame,有时也不会返回基于操作数特定功能的Series(即,它们碰巧有多少列,布尔掩码中有多少个值为True).当你这样做时df.set_index('col'),如果你知道你将永远得到一个DataFrame,那就更简单了,而不必担心原始版本有多少列.
请注意,还有.squeeze()用于将单列DataFrame转换为Series 的DataFrame方法.