当前位置: 首页 > 知识库问答 >
问题:

用熊猫打印价值观

井誉
2023-03-14

首先,我对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()

共有3个答案

顾兴昌
2023-03-14

您的列已命名并编制索引,因此我认为您需要直呼其名。

下面是处理数据(数据帧)的最佳方法的代码片段

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格式。

郏正信
2023-03-14

您不需要添加。列,也不需要

而不是:

d['Seg10_results'].columns[lista_colunas].values

尝试:

d['Seg10_results'][lista_colunas]
缪阎宝
2023-03-14

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()错误?还是有更好的方法进行条件值替换? 问题答案: 是的,您使用的是错误的,默认情况下不是就地操作,它会返回替换的数据框