2016-11-28 1 views
2

저는 파이썬을 처음 접했고 비슷한 문제를 많이 겪어 왔지만 앞으로 가지고있는 문제점을 찾아 낼 수 없습니다.팬더를 사용하여 특정 워크 시트에서 x 열의 값을 읽음

각 워크 시트 (데이터 (점수의 형식, 레이아웃 및 형식 14 컬럼에있는 값)입니다

  • 합계 :

    나는 팔 워크 시트에 분산 데이터로 .xlsx 데이터 집합을하고 난 다음 작업을 수행 할 모든 워크 시트의 열 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 

나는 또한이 시도하지만, 그것은 단지 전체 문서 반대로 전체 첫 번째 워크 시트의 데이터를 수출은 (내가 그래서 I를 이렇게하려고 :

내 첫 번째 시도는`빈 DataFrame을 '생산 모든 데이터를 내보내는 방법을 이해할 수 있음). 나는, 그것은 나에게 무엇이 잘못되었는지를 명확하게보기를 줄 수도 나는 .csv로 데이터를 내보낼 어쩌면 경우,이 생각을하기로 결정했습니다,하지만 난 nonethewiser입니다 :

import pandas as pd 
import numpy as np 

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

y7data.to_csv("results.csv") 

나는 다른 여러 가지가 시도 시도하고 각 워크 시트 내에서 열을 지정하지만이 작업을 수행 할 수 없습니다; 첫 번째 워크 시트에 대한 결과 만 생성하는 것처럼 보입니다.

어떻게 모든 워크 시트의 열 14에서 데이터를 읽고 나머지 단계를 수행 할 수 있습니까?

모든 안내를 주시면 감사하겠습니다. (Enthought 캐노피를 사용하고 openpyxl과 사투를 벌인 사람들을위한)

UPDATE :

내가 Enthought 캐노피 IDE를 사용하고 지속적 상관없이 내가 뭘하려 설치되지되지 openpyxl 주위에 오류 메시지를 수신했다. 똑같은 문제가있는 사람들에게 많은 시간을 낭비하지 말고 this post을 읽으십시오.각각의 모든 열을 읽을

첫째 :

enpkg openpyxl 1.8.5 

답변

1

난 당신이 샘플 file를 사용할 수 있다고 생각 : 즉, (무료), 다음 캐노피 명령 프롬프트를 통해이 코드를 실행 Enthought 숲 계정을 등록 라는 컬럼 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 함께 모든 열, I는 sum 모든 C, 그래프 axis x에 사용되는 키를 추가 olumns, reset_index에 의해 (샘플 데이터 a, a, a) MultiIndex의 두 번째 단계를 제거하고 마지막 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 

to_excel 새로운 DataFramedf 설정 열 이름을 만들고 쓰기 :

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

+0

이것은 훌륭하게 보입니다 (Enthought Canopy에서 실행하고 같은 결과를 얻었습니다). 코드에 무슨 일이 일어나는지 설명해 주시겠습니까? – MusTheDataGuy

+0

나는 그것을하고있다. – jezrael

+0

감사합니다. 사실, 나는 실수로 한 가지 실수를 저지르고 (각 워크 시트의 열 14에서 모든 합계 값으로 새 워크 시트를 작성) 그에 따라 질문을 업데이트했습니다. – MusTheDataGuy

0

, 즉각적인 문제는 워크 시트의 각에서 14 열을로드 관리입니다.

read_excel 대신 ExcelFile.parse을 사용하고 시트를 반복 할 수 있습니다.

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 파일이 반복 할 때마다로드되므로 쓸모가 없습니다.

Documentation for pandas.ExcelFile.parse.

+0

감사합니다. 그러나 이것은 오류를 생성합니다 :'KeyError : 14' – MusTheDataGuy

+0

예. 이것은 오타였습니다.'[14]'에서'.ix [14]' – Jivan

+0

로 수정했습니다. 어떻게하면 결과를 새로운 스프레드 시트로 내보낼 수 있습니까? ('xls_file.to_csv' 또는'xls_file.to_excel'은'read_excel '에서만 작동합니다)? – MusTheDataGuy

관련 문제