web-dev-qa-db-fra.com

Python Pandas dataframe lisant la plage spécifiée exacte dans une feuille Excel)

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:

  • supprimé toutes les autres informations
  • noms de colonnes ajoutés,
  • appliqué index_col sur ma colonne la plus à gauche
  • puis utilisé wb.loc[]
11
spiff

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)
7
ƘɌỈSƬƠƑ

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')
11
shane

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

my original Excel

my process with pandas read_Excel

1
ddnsimplon