我已经注意到单列数据帧几次令人懊恼(下面的例子);但在大多数其他情况下,单列数据框只是一个系列.有关为什么会返回一列DF的任何押韵或理由吗?
例子:
1)通过布尔掩码索引列时掩码只有一个真值:
df = pd.DataFrame([list('abc'), list('def')], columns = ['foo', 'bar', 'tar'])
mask = [False, True, False]
type(df.ix[:,mask])
2)在DataFrame上设置索引时,只有两列开头:
df = pd.DataFrame([list('ab'), list('de'), list('fg')], columns = ['foo', 'bar']
type(df.set_index('foo'))
我觉得如果我期待只有一列的DF,我可以通过调用来处理它
pd.Series(df.values().ravel(), index = df.index)
但在大多数其他情况下,单列数据框只是一个系列.有关为什么会返回一列DF的任何押韵或理由吗?
解决方法:
通常,当操作可以返回多列DataFrame时,将返回单列DataFrame.例如,当您使用布尔列索引时,如果有多个True值,则必须返回多列DataFrame,因此即使只有一列,也将始终返回DataFrame.同样,在设置索引时,如果您的DataFrame有两列以上,那么在为索引删除一个后,结果仍然必须是DataFrame,因此即使它只剩下一列,它仍然是一个DataFrame.
相反,如果你执行类似df.ix [:,’col’]的操作,它会返回一个Series,因为无法将一个列名传递给select可以选择多个列.
我们的想法是,有时候做一个操作不应该返回一个DataFrame,有时候会根据操作数特有的特征返回一个系列(即它们碰巧有多少列,你的布尔掩码中有多少个值为True).当你执行df.set_index(‘col’)时,如果你知道你总是会得到一个DataFrame,那就更简单了,而不必担心原始版本有多少列.
请注意,还有DataFrame方法.squeeze()用于将单列DataFrame转换为Series.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。