将Python 3D字典转换为数据帧



我已经使用pd.read_excel阅读excel文件,我也指定了我想要使用Regex的工作表。

def gettingSheetName(_directory,_regex):
'''reads the file using regex as a pattern for Sheet name'''
xl = pd.ExcelFile(_directory)
regex = re.compile(_regex)
sheets = [n for n in xl.sheet_names if regex.match(n)]
if sheets:
return pd.read_excel(xl, sheet_name=sheets,index_col=False)

因此,作为回报,我得到了一个三维字典。

{'SheetName':      Col1                 Col2
0             27                someText
1             35                someText
..           ...                         ...
171         4444                someText
172         6666                someText

我已经尝试pd.DataFrame.from_dict(Dic)将其转换为Pandas数据帧。我得到了这个错误

如果使用所有标量值,则必须传递索引

我也尝试了这个代码,我发现pd.DataFrame(list(Sach.items()), columns=['Col1', 'Col2']),但结果看起来像这样

Col1       col2
0   Sheetname  Col1 Col2 0....

表名去值,之后列,最后的值,我假设是开始与第一个索引,这是0我到处搜索,所有我能找到的是2D Dic没有考虑到表的名称。虽然我使用这个for循环而不是其他流行的方法来完成这项工作,但我的问题是,我是否有任何方法可以使用Pandas函数来实现这一点?或者可以从一开始就使用Sheetname ?

for key in Dic:
Dic=Dic[key]

编辑1:

所以在使用return pd.concat(pd.read_excel(xl, sheet_name=sheets,index_col=False))pd.DataFrame.from_dict(Sach)之后,我得到了这个数据帧,这几乎是我想要的,但我只需要颜色和值
Col1    Col2
Sheetname   0    Val1    Val2
1

使用concatDataFrame.reset_index:

return pd.concat(pd.read_excel(xl,sheet_name=sheets,index_col=False)).reset_index(drop=True)

d = {'SheetName':  pd.DataFrame({'Col1':[27,25], 'Col2':list('ab')}),
'SheetName1':  pd.DataFrame({'Col1':[270,205], 'Col2':list('th')})} 
print (d)
{'SheetName':    Col1 Col2
0    27    a
1    25    b, 'SheetName1':    Col1 Col2
0   270    t
1   205    h}

默认获取MultiIndex:

df = pd.concat(d)
print (df)
Col1 Col2
SheetName  0    27    a
1    25    b
SheetName1 0   270    t
1   205    h

转换为列使用:

df = pd.concat(d).droplevel(1).rename_axis('sheets').reset_index()
print (df)
sheets  Col1 Col2
0   SheetName    27    a
1   SheetName    25    b
2  SheetName1   270    t
3  SheetName1   205    h

删除MultiIndex

df = pd.concat(d).reset_index(drop=True)
print (df)
Col1 Col2
0    27    a
1    25    b
2   270    t
3   205    h

最新更新