我已經閱讀了 excel 檔案,pd.read_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)
因此,作為回報,我得到了一個具有 3 個維度的字典。
{'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)我得到了這個資料框,這幾乎是我想要的,但我只需要 Cols 和 Values
Col1 Col2
Sheetname 0 Val1 Val2
1
uj5u.com熱心網友回復:
concat與 一起使用DataFrame.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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/487955.html
下一篇:Python-轉換父子字典
