【发布时间】:2021-07-17 22:24:42
【问题描述】:
首先,我对 Python 完全陌生,所以,也许是一些超级简单的事情,我做得不对。
我正在读取多个工作表 xlsx 文件并将它们中的每一个发送到单独的数据框。 (至少,我认为我正在这样做)。
xl = pd.ExcelFile("results/report.xlsx")
d = {} # your dict.
for sheet in xl.sheet_names:
d[f'{sheet}']= pd.read_excel(xl,sheet_name=sheet)
lista_colunas = [7, 10, 101, 102, 103, 104]
d['Seg3_results'].columns[lista_colunas].values
这是结果。
>>> print(d)
{'Sheet': Empty DataFrame
Columns: []
Index: [], 'report': Empty DataFrame
Columns: []
Index: [], 'Seg10_results': ID Hora de início Hora de conclusão Email ... Humanas Exatas Linguagens Biológicas
0 1 2021-04-28 13:38:51 2021-04-28 16:25:59 anonymous ... 38 50 38 38
1 2 2021-04-28 17:02:11 2021-04-28 17:57:48 anonymous ... 25 0 25 38
[2 rows x 105 columns], 'Seg1_results': ID Hora de início Hora de conclusão ... Exatas Linguagens Biológicas
0 1 2020-05-26 08:30:00 2020-05-26 09:15:00 ... 25 29 38
1 2 2020-05-26 08:31:12 2020-05-26 09:21:38 ... 38 33 38
2 3 2020-05-26 08:27:40 2020-05-26 09:21:38 ... 50 29 38
然后,我尝试仅打印每个 df 的一些列(手动尝试)
lista_colunas = [7, 10, 101, 102, 103, 104]
d['Seg10_results'].columns[lista_colunas].values
但我得到的只是这个:
>>> d['Seg10_results'].columns[lista_colunas].values
array(['NOME COMPLETO', 'QUAL A SUA OFICINA DE APRENDIZAGEM?', 'Humanas',
'Exatas', 'Linguagens', 'Biológicas'], dtype=object)
正在显示任何值
如果我只打电话给d['Seg10_results'][lista_colunas],我会得到这个:
>>> d['Seg10_results'][lista_colunas]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Adilson\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\frame.py", line 3461, in __getitem__
indexer = self.loc._get_listlike_indexer(key, axis=1)[1]
File "C:\Users\Adilson\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\indexing.py", line 1314, in _get_listlike_indexer
self._validate_read_indexer(keyarr, indexer, axis)
File "C:\Users\Adilson\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pandas\core\indexing.py", line 1374, in _validate_read_indexer
raise KeyError(f"None of [{key}] are in the [{axis_name}]")
KeyError: "None of [Int64Index([7, 10, 101, 102, 103, 104], dtype='int64')] are in the [columns]"
我做错了什么?
及时,这是一项主要工作的一部分。 我要做的就是过滤所有工作表的某些列,并将它们保存到一个新的 xlsx 文件中(同样,由工作表分隔,但已过滤)
添加我的解决方案以导出具有多个工作表的单个文件
我知道这远非一个漂亮的代码,但它目前正在运行。
dados = pd.read_excel("results/report.xlsx", sheet_name=None)
df = pd.concat(dados[frame] for frame in dados.keys())
lista_colunas = [7, 10, 101, 102, 103, 104]
filtro = df.columns[lista_colunas]
final_df = df[filtro]
grouped_df = final_df.groupby(final_df.columns[1])
salas = grouped_df.groups.keys()
writer = pd.ExcelWriter('results/resultado.xlsx', engine='xlsxwriter')
for sala in salas:
splitdf = grouped_df.get_group(sala)
splitdf.to_excel(writer, sheet_name=str(sala))
writer.save()
【问题讨论】:
标签: python excel pandas openpyxl