Python Pandas:将数据帧分为同一电子表格的多个工作表
假设我有3个长度相同的字典,我将它们组合成一个独特的Python Pandas:将数据帧分为同一电子表格的多个工作表,python,excel,pandas,dataframe,slice,Python,Excel,Pandas,Dataframe,Slice,假设我有3个长度相同的字典,我将它们组合成一个独特的pandasdataframe。然后我将所述数据框转储到Excel文件中。例如: import pandas as pd from itertools import izip_longest d1={'a':1,'b':2,'c':3,'d':4,'e':5,'f':6} d2={'a':1,'b':2,'c':3,'d':4,'e':5,'f':6} d3={'a':1,'b':2,'c':3,'d':4,'e':5,'f':6} dic
pandas
dataframe。然后我将所述数据框转储到Excel文件中。例如:
import pandas as pd
from itertools import izip_longest
d1={'a':1,'b':2,'c':3,'d':4,'e':5,'f':6}
d2={'a':1,'b':2,'c':3,'d':4,'e':5,'f':6}
d3={'a':1,'b':2,'c':3,'d':4,'e':5,'f':6}
dict_list=[d1,d2,d3]
stats_matrix=[ tuple('dict{}'.format(i+1) for i in range(len(dict_list))) ] + list( izip_longest(*([ v for k,v in sorted(d.items())] for d in dict_list)) )
stats_matrix.pop(0)
mydf=pd.DataFrame(stats_matrix,index=None)
mydf.columns = ['d1','d2','d3']
writer = pd.ExcelWriter('myfile.xlsx', engine='xlsxwriter')
mydf.to_excel(writer, sheet_name='sole')
writer.save()
此代码生成具有唯一工作表的Excel文件:
首先准备好数据框架,以便像这样编写:
prepdf = mydf.groupby(mydf.index // 2).apply(lambda df: df.reset_index(drop=True))
prepdf
new_df = multiindex_me(mydf)
writer = pd.ExcelWriter('myfile.xlsx')
for sheet in prepdf.index.levels[0]:
sheet_name = 'super_{}'.format(sheet)
prepdf.xs(sheet).to_excel(writer, sheet_name)
writer.save()
您可以使用此函数重置索引
def multiindex_me(df, how_many_groups=3, group_names=None):
m = np.arange(len(df))
reset = lambda df: df.reset_index(drop=True)
new_df = df.groupby(m % how_many_groups).apply(reset)
if group_names is not None:
new_df.index.set_levels(group_names, level=0, inplace=True)
return new_df
像这样使用它:
prepdf = mydf.groupby(mydf.index // 2).apply(lambda df: df.reset_index(drop=True))
prepdf
new_df = multiindex_me(mydf)
writer = pd.ExcelWriter('myfile.xlsx')
for sheet in prepdf.index.levels[0]:
sheet_name = 'super_{}'.format(sheet)
prepdf.xs(sheet).to_excel(writer, sheet_name)
writer.save()
或:
然后将每个横截面写在不同的纸上,如下所示:
prepdf = mydf.groupby(mydf.index // 2).apply(lambda df: df.reset_index(drop=True))
prepdf
new_df = multiindex_me(mydf)
writer = pd.ExcelWriter('myfile.xlsx')
for sheet in prepdf.index.levels[0]:
sheet_name = 'super_{}'.format(sheet)
prepdf.xs(sheet).to_excel(writer, sheet_name)
writer.save()
sheet\u name='super{}.format(sheet)
做什么?是的,它命名工作表,但如何命名?@CF84这是字符串格式。我编了一个“supe”,可以是你选择的任何东西。其中的{}
与.format(sheet)
一起,其中sheet
中的值放置在字符串中{}
所在的位置。因此,您将迭代值[0,1,2]
和'super{}。format(sheet)
将计算为'super\u 0'
,'super\u 1'
和'super\u 2'
。如果您认为合适,请替换它。@CF84我去掉了您的索引,基本上是从头开始创建的。我想要一个pd.MultiIndex
,这样我就可以在第一层上迭代。我认为这是一个有用的方法。不管你怎么做,只要你用对你有用的方式把它分开就行了。@CF84不,你可以用你想要的任何东西作为工作表名。无论如何,玩玩这个。实验和学习。@CF84双精度。