gpt4 book ai didi

python - 使用 pandas 从特定工作表中读取 x 列中的值

转载 作者:行者123 更新时间:2023-12-01 03:32:02 25 4
gpt4 key购买 nike

我是Python新手,并且在SO上看过许多类似的问题,但找不到任何与我遇到的问题非常相似的东西,因此提出它:

我有一个 .xlsx 数据集,其中数据分布在八个工作表中,我想要执行以下操作:

  • 对每个工作表中第 14 列中的值进行求和(所有工作表中第 14 列中数据(分数)的格式、布局和类型均相同)
  • 创建一个新工作表,其中包含每个工作表第 14 列中的所有求和值
  • 将总分从最高到最低排序
  • 将求和值绘制在条形图中进行比较

我什至无法开始这个过程,因为我在第一点上很挣扎。我正在使用 pandas,并且无法从一个特定工作表读取数据 - 我似乎只能从第一个工作表读取数据(我打印结果以查看我的系统正在读取的内容)中)。

我的第一次尝试产生了一个“空数据帧”:

import pandas as pd

y7data = pd.read_excel('Documents\\y7_20161128.xlsx', sheetname='7X', header=0,index_col=0,parse_cols="Achievement Points",convert_float=True)
print y7data

我也尝试过这个,但它只导出整个第一个工作表的数据,而不是整个文档(我试图这样做,以便我可以了解如何导出所有数据)。我选择这样做的想法是,也许如果我将数据导出到 .csv,那么它可能会让我更清楚地了解出了什么问题,但我仍然不知道:

import pandas as pd
import numpy as np

y7data = pd.read_excel('Documents\\y7_20161128.xlsx')

y7data.to_csv("results.csv")

我尝试了许多不同的方法来尝试指定每个工作表中的哪一列,但无法使其正常工作;它似乎只产生第一个工作表的结果。

如何首先读取每个工作表中第 14 列的数据,然后执行其余步骤?

任何指导将不胜感激。

更新(对于那些使用 Enthought Canopy 并在 openpyxl 中苦苦挣扎的人):

我正在使用 Enthought Canopy IDE,并且无论我如何尝试,都不断收到有关 openpyxl 未安装的错误消息。对于那些遇到同样问题的人,请节省大量时间并阅读 this post 。简而言之,注册一个 Enthought Canopy 帐户(免费),然后通过 Canopy 命令提示符运行此代码:

enpkg openpyxl 1.8.5

最佳答案

我想你可以使用这个示例file :

首先将每个工作表中的所有列读取到名为 y7data 的列的 list 中:

y7data = [pd.read_excel('y7_20161128.xlsx', sheetname=i, parse_cols=[13]) for i in range(3)]
print (y7data)
[ a
0 1
1 5
2 9, a
0 4
1 2
2 8, a
0 5
1 8
2 5]

然后concat将所有列放在一起,我添加用于图中的 axis x 的键,sum所有列,按 reset_index 删除 MultiIndex 的第二级(示例数据中的 a, a, a)最后sort_values :

print (pd.concat(y7data, axis=1, keys=['a','b','c']))
a b c
a a a
0 1 4 5
1 5 2 8
2 9 8 5

summed = pd.concat(y7data, axis=1, keys=['a','b','c'])
.sum()
.reset_index(drop=True, level=1)
.sort_values(ascending=False)

print (summed)
c 18
a 15
b 14
dtype: int64

创建新的DataFrame df,设置列名并写入to_excel :

df = summed.reset_index()#.
df.columns = ['a','summed']
print (df)
a summed
0 c 18
1 a 15
2 b 14

如果需要添加新工作表,请使用此 solution :

from openpyxl import load_workbook

book = load_workbook('y7_20161128.xlsx')
writer = pd.ExcelWriter('y7_20161128.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df.to_excel(writer, "Main", index=False)
writer.save()

最后Series.plot.bar :

import matplotlib.pyplot as plt

summed.plot.bar()
plt.show()

graph

关于python - 使用 pandas 从特定工作表中读取 x 列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40845492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com