Suite

Utilisation d'ArcPy pour lire une feuille de calcul Excel dans un dictionnaire Python


Comment pourrais-je créer un script qui lit une feuille de calcul Excel spécifiée et place les valeurs dans un dictionnaire ?

J'ai lu sur la bibliothèque xlrd et sur la façon dont la bibliothèque s'efforce de lire des feuilles de calcul Excel en Python. Cependant, j'espérais le faire strictement dans le module ArcPy. Est-ce possible ou seriez-vous obligé d'utiliser la bibliothèque xlrd ?


Selon la suggestion d'autres utilisateurs, vous devez utiliser l'outil Excel to Table GP avec SearchCursor pour construire le dictionnaire en python. Voici un exemple de code :

exemples de données dans un fichier excel :

col1 col2 col3 --------------------- val1 val2 val3 val4 val5 val6 import arcpy inputExcel = r"D:Test.xls" sheetName = "Sheet1" memoryTable = "in_memory" + "" + "memoryTable" #Assurez-vous que la mémoire est vide arcpy.Delete_management(memoryTable) arcpy.ExcelToTable_conversion(inputExcel, memoryTable,sheetName ) d = {} fieldIndices = {} champs = arcpy.ListFields(memoryTable ) pour i,field in enumerate(fields) : d[field.name]=[] fieldIndices[i] = field.name avec arcpy.da.SearchCursor(memoryTable, '*') comme curseur : pour la ligne dans le curseur : pour i in range(0,len(row)): d[fieldIndices[i]].append(row[i]) del curseur

Et le dictionnaire python de sortie :

>>> d {u'ObjectID' : [1, 2], u'col1' : [u'val1', u'val4'], u'col2' : [u'val2', u'val5'], u'col3' : [u'val3', u'val6']}

j'espère que ça aide


Lire un fichier excel qui contient des données sur la population des comtés et calculer des résumés par état, comté

Dans le cadre de l'exercice du livre "Automatiser les trucs ennuyeux avec Python" chapitre 13 sur Excel, j'ai eu l'exercice suivant :

  1. Lit les données de la feuille de calcul Excel
  2. Compte le nombre de secteurs de recensement dans chaque comté
  3. Compte la population totale de chaque comté
  4. Imprime les résultats

Voici la structure de la feuille de calcul

Voici mon code et j'aimerais avoir des avis sur la façon dont je peux améliorer ce code car je suis assez nouveau avec Python.


Calculer les dommages et les économies pour les réclamations d'assurance automobile

Les descriptions des colonnes sont : (A) l'année de la réclamation, (B) qui est la compagnie d'assurance (C) si le véhicule est conduit, (D) le code de circonstance (E) le retard dans l'augmentation de la réclamation (F) l'âge du véhicule (G ) Dommages (H) Économies.

Les colonnes Dommages et Économies sont vides : je dois remplir les colonnes Dommages et économies avec les poids/valeurs de chacune des colonnes (A) à (F). Les poids de ces colonnes sont donnés dans une autre feuille de calcul. L'autre feuille de calcul contient à nouveau 2 feuilles (i) les valeurs des dommages et (ii) les valeurs des économies.

J'ai créé un code de compréhension de dictionnaire simple comme celui-ci :

Cependant, je voulais vérifier s'il existe une meilleure approche/alternative que cette approche. Peut-être une approche plus basée sur la compréhension où les boucles for peuvent être évitées ?

Je pense que c'est un peu codé en dur ici, avec beaucoup d'approches d'index (indexation de colonne) utilisées. L'ensemble de données d'origine a de nombreuses colonnes donnant les index peuvent être encombrants.

Les feuilles de calcul des valeurs des colonnes où ces poids sont présents ont des feuilles séparées de dommages et d'économies. Peut-être que cela peut être inclus de manière transparente sans faire les calculs deux fois ?


Lire des fichiers texte en Python

Les fichiers texte sont l'un des formats de fichiers les plus courants pour stocker des données. Python facilite la lecture des données à partir de fichiers texte.

Python fournit le ouvert() fonction pour lire les fichiers qui prennent le chemin du fichier et le mode d'accès au fichier comme paramètres. Pour lire un fichier texte, le mode d'accès au fichier est ‘r’. J'ai mentionné les autres modes d'accès ci-dessous:

  • ‘w’ – écriture dans un fichier
  • ‘r+’ ou ‘w+’ – lire et écrire dans un fichier
  • ‘a’ – ajout à un fichier déjà existant
  • ‘a+’ – ajouter à un fichier après la lecture

Python nous fournit trois fonctions pour lire les données d'un fichier texte :

  1. lire(n) – Cette fonction lit n octets à partir des fichiers texte ou lit les informations complètes à partir du fichier si aucun nombre n'est spécifié. Il est assez intelligent pour gérer les délimiteurs lorsqu'il en rencontre un et sépare les phrases
  2. ligne de lecture(n) – Cette fonction vous permet de lire n octets du fichier mais pas plus d'une ligne d'informations
  3. lignes de lecture() – Cette fonction lit les informations complètes dans le fichier mais contrairement lis(), il ne se soucie pas du caractère de délimitation et les imprime également sous forme de liste

Voyons en quoi ces fonctions diffèrent lors de la lecture d'un fichier texte :

Le lis() fonction a importé toutes les données du fichier sous la forme structurée correcte.

En fournissant un numéro dans le lis() fonction, nous avons pu extraire le nombre d'octets spécifié du fichier.

En utilisant readline(), une seule ligne du fichier texte a été extraite.


Avis de non-responsabilité : je ne connais pas openpyxl . J'espère que cette critique ne sera pas absurde. Dis-le moi !

Le code affiché copie le contenu de la première feuille dans data , écrit le contenu inversé (transposé ?) dans une nouvelle feuille tmp_sheet , copie les attributs de la feuille d'origine dans tmp_sheet et supprime enfin la feuille d'origine.

Ce que je ne comprends pas, c'est pourquoi ne pas mettre à jour la feuille d'origine directement ? Vous pouvez parcourir les coordonnées des cellules sous la diagonale de la feuille, calculer les coordonnées de la cellule avec laquelle échanger, utiliser un stockage temporaire approprié pour échanger des valeurs uniques. La diagonale peut être laissée seule, elles n'ont pas besoin d'être échangées avec quoi que ce soit.

Cette approche aurait l'avantage que s'il y a plusieurs feuilles dans le fichier, le contenu de la première feuille reste sur la première feuille et vous n'avez pas à vous soucier de copier les propriétés de la feuille telles que le titre.


Charger plusieurs feuilles de calcul à partir d'un fichier Excel vers plusieurs DataFrames

La feuille de calcul se trouve juste au-dessus de la section des références à ce lien.

C'est une publication pour les fréquences de locus d'ADN STR pour calculer les probabilités de correspondance. J'aimerais créer un calculateur de probabilité de correspondance et le faire évoluer pour effectuer des centaines de milliers de calculs plutôt qu'un seul. La première étape est le chargement des fréquences en mémoire et fait l'objet de ce code. J'ai pensé qu'une base de données pour chaque ensemble de population serait bien.

La première rangée dans chaque feuille de calcul se trouve juste une étiquette de population. Il peut être ignoré.

La deuxième ligne est l'en-tête : La première colonne "Allele" est l'appel d'allèle STR. C'est ce à quoi sera comparé pour l'appariement. Il s'agira généralement d'un nombre entier, mais peut parfois avoir une décimale de 0,1, 0,2 ou 0,3 le plus souvent. Parfois, il s'agit d'une chaîne avec un symbole supérieur ou inférieur à (par exemple, "<9.2", ">17") bien que je ne sache pas s'il y en a dans le fichier Excel.

Les 2e à 25e colonnes sont les différents emplacements qui sont testés. Chacun est indépendant.

J'ignorerai tout ce qui se trouve après la 25e colonne et tout ce qui dépasse la dernière rangée de fréquences. La plupart des points de données à l'intérieur de ces limites sont vides. Ils seront remplis de ce qu'on appelle la fréquence allélique minimale. Si vous êtes intéressé par quelque chose de plus, je serais heureux de discuter, mais ce n'est probablement pas pertinent pour la discussion en cours.

Je suis sûr qu'il existe un moyen plus élégant de le faire et probablement un moyen plus rapide de le faire. C'est pourquoi je suis ici. S'il existe une meilleure structure pour le mettre en place, ou un moyen plus rapide/plus élégant de le faire, veuillez me le faire savoir. C'est mon premier coup de poignard. Les trames prennent environ 3 secondes pour charger toutes les données. Je suppose que ça devrait être beaucoup plus rapide que ça. Quoi qu'il en soit, voici mon code.


Écrire le contenu des tableaux Word dans une feuille de calcul

J'ai écrit ce script pour un ancien collègue l'année dernière. Elle avait reçu un document Word contenant environ 600 tableaux qui avaient dû être extraits d'une base de données quelque part. Les tableaux avaient le même en-tête et chaque tableau représentait un “incident”, avec des dates, des détails, etc.

On lui a demandé de le « mettre dans Excel / 8221. Après avoir copié manuellement le premier tableau dans les colonnes correspondantes d'une feuille de calcul, elle est venue me voir. Ce genre de chose est normalement une tâche que nous confierions à un étudiant, car cela n'a rien à voir avec le SIG. Néanmoins, quand j'ai vu la structure répétitive, j'étais sûr de pouvoir trouver quelque chose pour le faire automatiquement.

importer docx
importer xlwt
doc = r"C:SomeArbFolderinput.docx"
xls = r"C:SomeArbFolderoutput.xls"
document = docx . Document (doc)
livre = xlwt . Cahier d'exercices ()
cur_sheet = livre . add_sheet ( "Tables" )
num_ligne = 0
tableaux = document . tables # Récupère toutes les tables dans le docx
# Obtenir la ligne d'en-tête de la 1ère table & 1ère ligne
pour index , cellule dans énumérer ( tables [ 0 ]. lignes [ 0 ]. cellules ):
cur_sheet . écrire ( num_ligne , index , cellule . texte )
pour tableau dans tableaux :
pour la ligne dans le tableau. rows [ 1 :]: # Ignore la ligne d'en-tête répétitive de chaque tableau
num_ligne += 1
pour index , cellule dans énumérer ( ligne . cellules ):
si cellule != '' :
cur_sheet . écrire ( num_ligne , index , cellule . texte . bande ())
livre . enregistrer ( xls )

Le script trouve tous les tableaux du document et récupère l'en-tête du premier tableau pour servir d'en-têtes dans la feuille de calcul. Il parcourt ensuite toutes les tables, saute la ligne d'en-tête et remplit la feuille de calcul avec toutes les lignes des différentes tables.

Il a fallu environ 15 minutes pour écrire (il fallait jouer avec l'accès aux éléments du tableau correctement) et moins d'une minute pour extraire les données. C'est le temps qu'il aurait fallu pour copier 5 des tables manuellement. À ce rythme, il aurait fallu environ 4 jours pour terminer le processus.


Libexcel-writer-xlsx-perl

Le module Excel::Writer::XLSX permet de créer un fichier Excel au format 2007+ XLSX.

Plusieurs feuilles de calcul peuvent être ajoutées à un classeur et la mise en forme peut être appliquée aux cellules. Du texte, des nombres et des formules peuvent être écrits dans les cellules.

Excel::Writer::XLSX utilise la même interface que le module Spreadsheet::WriteExcel qui produit un fichier Excel au format binaire XLS.

Excel::Writer::XLSX prend en charge toutes les fonctionnalités de Spreadsheet::WriteExcel et, dans certains cas, a plus de fonctionnalités. Pour plus de détails, voir Compatibilité avec Spreadsheet::WriteExcel.

Le principal avantage du format XLSX par rapport au format XLS est qu'il autorise un plus grand nombre de lignes et de colonnes dans une feuille de calcul.

Le format de fichier XLSX produit également des fichiers beaucoup plus petits que le format de fichier XLS.


Une réflexion sur &ldquo Inverser les coordonnées de la feuille de calcul du géocodage à l'aide du géocodeur et des pandas &rdquo

Super article, je ne connaissais pas le géocodeur ! Pensez également à utiliser le package Python geopy qui, je pense, est aujourd'hui l'une des alternatives les plus populaires pour le géocodage.

Laisser une réponse Annuler la réponse

Ce site utilise Akismet pour réduire le spam. Découvrez comment les données de vos commentaires sont traitées.

Je m'appelle Cindy et voici mon blog sur la géoinformatique (SIG/bases de données/sciences géographiques), la programmation et l'apprentissage tout au long de la vie.


Comment importer Excel/feuille de calcul dans une liste Sharepoint existante à l'aide de Javascript

Je voudrais importer des données d'une feuille Excel dans une liste existante. Je vois que cela peut être fait en utilisant Power Shell ou en utilisant C#.

Quelqu'un peut-il m'aider à le faire en utilisant JavaScript en ajoutant un composant WebPart. pour avoir un bouton qui, en cliquant, devrait nous permettre de télécharger une feuille Excel lorsque nous avons choisi la bonne feuille, il devrait prendre les colonnes nécessaires de la feuille et les ajouter à la liste si quelque chose a changé par rapport aux anciennes, alors il doit être mis à jour.

Veuillez m'aider à trouver une solution à ce problème.