J'ai beaucoup de tableaux différents (et d'autres données non structurées dans une feuille Excel) .. J'ai besoin de créer un cadre de données hors de la plage 'A3: D20' à partir de 'Sheet2' de la feuille Excel 'data'.
Tous les exemples que je rencontre par exploration jusqu'au niveau de la feuille, mais pas comment le choisir dans une plage exacte.
import openpyxl
import pandas as pd
wb = openpyxl.load_workbook('data.xlsx')
sheet = wb.get_sheet_by_name('Sheet2')
range = ['A3':'D20'] #<-- how to specify this?
spots = pd.DataFrame(sheet.range) #what should be the exact syntax for this?
print (spots)
Une fois que j'aurai cela, je prévois de rechercher des données dans la colonne A et de trouver sa valeur correspondante dans la colonne B.
Edit 1: Je me suis rendu compte que openpyxl prend trop de temps, et j'ai donc changé cela en pandas.read_Excel('data.xlsx','Sheet2')
à la place, et c'est beaucoup plus rapide à ce stade au moins.
Edit 2: Pour l'instant, j'ai mis mes données sur une seule feuille et:
index_col
sur ma colonne la plus à gauchewb.loc[]
Une façon de le faire est d'utiliser le module openpyxl .
Voici un exemple:
from openpyxl import load_workbook
wb = load_workbook(filename='data.xlsx',
read_only=True)
ws = wb['Sheet2']
# Read the cell values into a list of lists
data_rows = []
for row in ws['A3':'D20']:
data_cols = []
for cell in row:
data_cols.append(cell.value)
data_rows.append(data_cols)
# Transform into dataframe
import pandas as pd
df = pd.DataFrame(data_rows)
Utilisez les arguments suivants de documentation de pandas read_Excel :
- skiprows: list-like
- Lignes à sauter au début (index 0)
- parse_cols: int ou list, par défaut Aucun
- Si aucun analyse alors toutes les colonnes,
- Si int indique alors la dernière colonne à analyser
- Si la liste des entiers indique alors la liste des numéros de colonne à analyser
- Si la chaîne indique une liste de noms et de plages de colonnes séparés par des virgules (par exemple, "A: E" ou "A, C, E: F")
J'imagine que l'appel ressemblera à:
df = read_Excel(filename, 'Sheet2', skiprows = 2, parse_cols = 'A:D')
ma réponse avec pandas O.25 testé et a bien fonctionné
pd.read_Excel('resultat-elections-2012.xls', sheet_name = 'France entière T1T2', skiprows = 2, nrows= 5, usecols = 'A:H')
pd.read_Excel('resultat-elections-2012.xls', index_col = None, skiprows= 2, nrows= 5, sheet_name='France entière T1T2', usecols=range(0,8))
Donc: j'ai besoin de données après deux premières lignes; lignes désirées sélectionnées (5) et col A à H.
Attention, la réponse de @shane doit être améliorée et mise à jour avec les nouveaux paramètres de Pandas