我是python的新手,在SO上看了很多类似的问题,但找不到任何与我有问题的东西,因此我提出了这个问题:
我有一个.xlsx
数据集,数据分布在八个工作表中,我想执行以下操作:
我甚至无法开始这个过程,因为我在第一点上挣扎。我正在使用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
答案 0 :(得分:1)
我认为您可以使用此示例file:
首先将每个工作表中的所有列读取到名为list
的列y7data
:
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
所有列,删除第二级MultiIndex
({{1}在reset_index
和最后sort_values
:
a, a, a
创建新的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
,设置列名并写入to_excel
:
df
如果需要添加新工作表,请使用此solution:
df = summed.reset_index()#.
df.columns = ['a','summed']
print (df)
a summed
0 c 18
1 a 15
2 b 14
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()
答案 1 :(得分:0)
根据我的理解,您当前的问题是从每个工作表中加载第14列。
您可以使用ExcelFile.parse
代替read_excel
并循环播放您的工作表。
xls_file = pd.ExcelFile('Documents\\y7_20161128.xlsx')
worksheets = ['Sheet1', 'Sheet2', 'Sheet3']
series = [xls_file.parse(sheet, parse_cols=[13]) for sheet in worksheets]
df = pd.DataFrame(series)
然后,sum()
你的专栏继续前进。
使用ExcelFile
然后使用ExcelFile.parse()
有利于仅加载Excel文件一次,并迭代每个工作表。使用read_excel
可以在每次迭代中加载Excel文件,这是无用的。