Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas:将数据帧分为同一电子表格的多个工作表_Python_Excel_Pandas_Dataframe_Slice - Fatal编程技术网

Python Pandas:将数据帧分为同一电子表格的多个工作表

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

假设我有3个长度相同的字典,我将它们组合成一个独特的
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双精度。