如果我将csv文件读入pandas数据帧,然后使用groupby(pd.groupby([column1,...])),为什么我不能在新的分组对象上调用to_excel属性。
import pandas as pd
data = pd.read_csv("some file.csv")
data2 = data.groupby(['column1', 'column2'])
data2.to_excel("some file.xlsx") #spits out an error about series lacking the attribute 'to_excel'
data3 = pd.DataFrame(data=data2)
data3.to_excel("some file.xlsx") #works just perfectly!
有人可以解释为什么pandas需要经历从数据框转换为系列以对行进行分组的整个过程吗?
我相信我的问题不清楚。 重新构思的问题:当你使用pd.groupby()时,为什么pandas会将数据帧转换为另一种对象(groupby对象)?显然,您可以将此对象转换为数据框,其中分组列成为(多级)索引。 为什么不默认执行此操作(用户不必手动将其作为数据框投射)?
答案 0 :(得分:1)
要回答有关groupby
为什么g = df.groupby('Blah')
为您提供groupby对象而不是DataFrame的重新定义的问题:它可以提高效率。 groupby对象不会复制有关原始数据的所有信息;它实质上将索引存储到原始DataFrame中,指示每行所在的组。这允许您使用单个groupby对象进行多个聚合组操作,每个操作可以使用不同的列(例如,您可以{{1}然后单独执行g.SomeColumn.sum()
和g.OtherColumn.mean()
)。
简而言之,groupby的主要目的是让你在组上进行聚合计算。简单地将单个列的值旋转到索引级别并不是大多数人对groupby
所做的事情。如果你想这样做,你必须自己做。