首先,我对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()
您的列已命名并编制索引,因此我认为您需要直呼其名。
下面是处理数据(数据帧)的最佳方法的代码片段
1.
import pandas as pd
btc = pd.read_csv('BTC_Analysis/BTC-USD.csv')
数据帧=pd。数据帧()
打印(数据框['Date'])
对于多个条目,只需添加第二个括号:
print(dataframe[['Date', 'Open']])
以下是熊猫文档中的一些快速信息:
https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html
此外,您还可以在本教程中找到一些有用的信息
另外,处理XLSX文件可能会很麻烦,如果可能的话,通常最好使用CSV格式。
您不需要添加。列
,也不需要值
。
而不是:
d['Seg10_results'].columns[lista_colunas].values
尝试:
d['Seg10_results'][lista_colunas]
d['Seg10_results'][lista_colunas]
基本上是d['Seg10_results][7, 10, 101, 102, 103, 104]
并且lista_colunas
中的任何项都不是d['Seg10_results']
中的实际列。
您可能想要:
>
使用熊猫。例如,DataFrame.iloc
(文档),
d['Seg10_results']。iloc[:,lista_colunas]
;或
在变量中存储d['Seg10_results']。列[lista_colunas]。值
,即ol
并执行
d['Seg10_结果][cols]
。
问题内容: 我正在做一些地理编码工作,我曾用它来屏幕刮取位置地址所需的xy坐标,我将xls文件导入了panda数据框,并希望使用显式循环来更新没有xy坐标的行,例如下面: 我已经阅读了为什么在遍历熊猫DataFrame之后该功能不能“使用”?并且完全意识到,iterrow仅提供给我们一个视图,而不是一个供编辑的副本,但是如果我真的要逐行更新值怎么办?是否可行? 问题答案: 您从中获得的行是不再连接
我需要得到df的滚动第二大值。 以获得最大的价值 当我尝试这个时,python抛出了一个错误 这是虫子吗?我还能用什么性能好的?
问题内容: 我试图找出在连接值时是否可以删除数据框中的重复项 例: 输出应该是这样的: 我尝试使用df.drop_duplicates()和一些循环来保存v2列值,但什么也没有。我正在尝试通过使用Pandas使其美观大方,干净利落。 有人知道大熊猫可以做到这一点吗? 问题答案: 假设您有两列,这应该很容易。使用+ 。应该由和合并。 如果您有多个需要相同聚合的此类列,请构建一个称为的agg dict
问题内容: 我有一个数据框: 现在我想找回乔治的年龄: 但这会输出一些额外的信息以及原始值: 我该如何打印? 问题答案: 您可以使用+转换为,然后通过以下方式选择第一个值: 或直接选择with的第一个值: 或通过以下方式选择第一项: 或使用: 如果可能没有匹配值,则上述解决方案将失败。 然后,可以使用与招:
问题内容: 我在终端上经常使用和。系列的默认值返回精简的样本,具有一些头和尾值,但其余部分丢失。 有没有一种内置方法可以漂亮地打印整个?理想情况下,它将支持适当的对齐方式,可能会支持列之间的边界,甚至可能会为不同的列进行颜色编 问题答案: 你也可以将,与一个或多个选项一起使用: 这将使选项自动返回其先前的值。 如果你正在使用,则使用代替将使用丰富的显示逻辑(像这样)。
问题内容: 我知道这个问题有很多主题,但是没有一种方法适合我,因此我将发布有关我的具体情况的信息 我有一个看起来像这样的数据框: 我想做的是将“性别”列中的全0替换为“女”,并将所有1替换为“男”,但是当我使用上面的代码时,数据框中的值似乎没有变化 我是否使用了replace()错误?还是有更好的方法进行条件值替换? 问题答案: 是的,您使用的是错误的,默认情况下不是就地操作,它会返回替换的数据框