J'ai un Dataframe Pandas, qui contient 610 lignes, et chaque ligne contient une liste imbriquée de paires de coordonnées, on dirait que:
p>
[1377778.4800000004, 6682395.377599999] est une paire de coordonnées. P>
Je veux inhorter chaque rangée, donc au lieu d'une ligne contenant une liste de coordonnées, j'aurai une ligne pour chaque paire de coordonnées, c'est-à-dire.: p>
p>
J'ai essayé s.Apply (PD.Series) .stact () de cette question Split des valeurs de matrice imbriquées de Pandas DataFrame Cell sur plusieurs rangées mais malheureusement cela n'a pas fonctionné. P>
S'il vous plaît des idées? Merci beaucoup d'avance! P>
3 Réponses :
coord 0 [0, 1] 1 [2, 3] 2 [4, 5] 3 [6, 7] 4 [8, 9] x y 0 0 1 1 2 3 2 4 5 3 6 7 4 8 9
Une chose que vous pouvez faire est d'utiliser NUMPY. Il vous permet d'effectuer de nombreuses opérations de liste / de tableau de manière rapide et efficace. Cela inclut des listes «inhormes» (Reshaping). Ensuite, vous devez seulement convertir en Pandas Dataframe.
Par exemple, P>
import numpy as np #your list coordinate_list = [[[1377778.4800000004, 6682395.377599999],[6582395.377599999, 2577778.4800000004], [6582395.377599999, 2577778.4800000004]]] #convert list to array coordinate_array = numpy.array(coordinate_list) #print shape of array coordinate_array.shape #reshape array into pairs of reshaped_array = np.reshape(coordinate_array, (3, 2)) df = pd.DataFrame(reshaped_array) df.columns = ['X', 'Y']
J'essaie d'obtenir ces coordonnées d'Arcgis. Il ressemble à ceci: dans: geometry_list = [] pour RSLT dans ['Caractéristiques']: gm = np.array (RSLT ["geometry"] ['Rings']) géométry_list.append (GM) Out: [Array ( Il y ait une liste avec 610 tableaux, chacun contient diff. Nombre de paires de coordintes, présentées comme des tableaux ... Lorsque j'essaie de convertir la liste en tableau, je Obtenez une erreur suivante: coordonnée_array = np.array (géométrie_list) ValueError: Impossible de diffuser la matrice d'entrée de la forme (115,2) en forme (1)
Voici ma nouvelle réponse à votre problème. J'ai utilisé "Réduire" pour aplatir votre tableau imbriqué, puis j'ai utilisé la "chaîne iTerTools" pour tout transformer en une liste 1D. Après cela, j'ai remodelé la liste dans un tableau 2D qui vous permet de la convertir en DataFrame dont vous avez besoin. J'ai essayé d'être aussi générique que possible. S'il vous plaît laissez-moi savoir s'il y a des problèmes.
#libraries import operator from functools import reduce from itertools import chain #flatten lists of lists using reduce. Then turn everything into a 1d list using #itertools chain. reduced_coordinates = list(chain.from_iterable(reduce(operator.concat, geometry_list))) #reshape the coordinates 1d list to a 2d and convert it to a dataframe df = pd.DataFrame(np.reshape(reduced_coordinates, (-1, 2))) df.columns = ['X', 'Y']
Merci beaucoup! Cela a fonctionné! Je suis vraiment reconnaissant :)
En fait, il ne fonctionnait que pour l'un des 610 matrices (une matrice ressemble à [[[[1377909.0626 6696341.0589], [1377913.8088 6696326.7092], ...]]]] Mais pour ma géométry_list, qui est déjà une liste de 610 tableaux de ce type et que la forme [Array1 ([[[[...]]]]), Array2 ([[[[...]]]), ... Array610 ([[ [...]]]]] ça ne marche toujours pas ...
Le problème est également que les matrices de THERSE ont des longueurs différentes, donc je reçois ValueError: les opérandes ne pouvaient pas être diffusées avec des formes (1 115,2) (1 1434,2) - Array1 se compose de 115 paires de coordonnées et Array2 a 134 paires.
Eh bien, j'ai modifié un peu vos conseils, et maintenant ça marche))) Merci beaucoup: DDD
Hey, content que cela fonctionne pour vous maintenant :)) N'hésitez pas à donner ma réponse et upvote si vous l'avez aimé
Oui, j'ai essayé de uppoter, mais je n'ai malheureusement pas assez de réputation pour faire mon vote visible publiquement
Pourriez-vous ajouter une copie de vos données pouvant être collées collées?