Exporter valeurs uniques (lignes) python panda excel
RésoluBonjour,
regarder script à partir de (
for pn in liste2D:
but du jeu :obtenir des lignes à valeurs uniques
voir le fichier joint Feuil 1, ca fonctionne si je mets i=1 j'obtiens des lignes à valeur uniques normal i=1

Feuil 2 si je mets i=i+1 les lignes ne sont plus uniques

je souhaiterai:
obtenir le résultat de la Feuil3

j'ai essayé voir en gras mais ca ne fonctionne pas
for pn in liste2D:
ligne = pn + ligne
ligne.append(million)
if pn[2] == '8Million_Kit':
ligne.append(pn[1] + "-" + million + "-" + "B2B_8MillionKit")
else:
ligne.append(pn[1] + "-" + million + "-" + pn[2])
if ligne not in unique_ligne:
unique_ligne.append(ligne)
<strong>unique_ligne.append(i)</strong>
i = i+1
ligne = []
import pandas as pd
import numpy as np
import openpyxl
""" on paramètre panda pour qu'il nous montre plus de colonne et lignes """
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 5000)
# Ouverture du fichier Excel
df1= dataframe_feuil1 = pd.read_excel('C:\\Users\\XXXXXX\\PycharmProjects\\pythonProject5\\PIM-creation\\Batch_OutputGenerated_creation.xlsx',engine='openpyxl',sheet_name='Feuil4')
df1['8million']=df1['8million'].astype(str).str.replace('.0','')
liste2D= [] # va être transformé en Dataframe après remplissage
listing=[]
ligne=[]
unique_ligne=[]
i=1
for index,row in dataframe_feuil1.iterrows():# parcourir ligne par ligne
rangee = []# variable temporaire pour stocker les info de la ligne
# construction de la rangée
rangee.append('')
if(isinstance(row['pn'],str)): # renvoi le PN kit si la cellule est vide ou non
labelpn = row['pn']
if(isinstance(row['kit'], str)):
rangee.append(row['kit'])
else:
rangee.append(labelpn)
if(isinstance(row['kit'], str)):
label2='8Million_Kit'
label3='Relate'
else:
label2=label2
label3=label3
if (isinstance(row['kit'], str)):
rangee.append(label2)
else:
rangee.append(label3)
if (isinstance(row['kit'], str)):
rangee.append(row['n°série debut'])
rangee.append(row['n°série fin'])
else:
rangee.append('')
rangee.append('')
liste2D.append(rangee)
liste_million=[]
unique_listing=[]
for index,row in dataframe_feuil1.iterrows():# parcourir ligne par ligne
if(row['8million']!='nan'): # renvoi le PN kit si la cellule est vide ou non
liste_million.append(row['8million'])
'''df1['start date']=df1['start date']- pd.to_timedelta(df1['start date']).dt.date'''
print(liste_million)
print('taille',len(liste_million)) # afficher liste
for million in liste_million:
for pn in liste2D:
ligne = pn + ligne
ligne.append(million)
if pn[2] == '8Million_Kit':
ligne.append(pn[1] + "-" + million + "-" + "B2B_8MillionKit")
else:
ligne.append(pn[1] + "-" + million + "-" + pn[2])
ligne.append(i)
listing.append(ligne)
i = i + 1
ligne = []
print(listing)
print(unique_ligne)
df9b= pd.DataFrame(unique_ligne)
df9b.columns=["ProductRelationshipEntityType","PRChildProductId","PRType","B2B_SerialNumberRangeStart__c","B2B_SerialNumberRangeEnd__c","PRParentProductId","PRId","sequence"]
df9b.to_excel('Related3rdkit.xlsx',sheet_name='Feuil1',index=False)
- Exporter valeurs uniques (lignes) python panda excel
- Liste déroulante excel - Guide
- Panda antivirus - Télécharger - Antivirus & Antimalwares
- Exporter favoris chrome - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
4 réponses
Je pense que tu peux comprendre ton erreur en examinant attentivement ce que donne "print(unique_ligne)".
Ton erreur, c'est de faire
unique_ligne.append(ligne)
alors que ligne est une liste, et que tu modifies ensuite cette liste.
Regarde l'exemple ci-dessous:
input=[['a'],['b'],['c'],['a'],['d'],['b'],['e']]
connu=[]
output=[]
seq=1
for i in input:
if i not in connu:
connu.append(i)
o=i.copy()
o.append(seq)
output.append(o)
seq += 1
print("connu",connu)
print("input",input)
print("output",output)
Il fonctionne grâce au .copy() en ligne 8. Il ne donne pas le résultat attendu si je fais simplement o=i en ligne 8.
bonjour,
peux-tu partager ton code complet, en précisant bien "Python" dans la fénêtre de partage du code?
Il serait aussi utile de montrer la situation de départ.
Travaille sur un cas très court.
Montre-nous ce qu'affiche ton code, et explique ce que tu souhaites qu'il affiche.
Entendu je supprime mon msg et j'en crée un nouveau avec les bons intitulés, et un script plus court et plus simple
Pourquoi ne pas continuer dans cette discussion, avec un programme plus simple, et sans utiliser un fichier Excel.
Cette implémentation marche mais pose plusieurs problème en terme de performance qui la rendra difficilement utilisable pour de gros fichiers :
import numpy as np np.random.seed(2) a = np.random.randint(0, 1000, size=1000) def drop_duplicates_list(a: iter) -> iter: singles = list() for x in a: if x not in singles: singles.append(x) return singles def drop_duplicates_set(a: iter) -> iter: singles = set() for x in a: if x not in singles: singles.add(x) return singles def drop_duplicates_list_comprehension(a: iter) -> iter: singles = list() for x in a: if x not in singles: singles.append(x) return singles def drop_duplicates_set_comprehension(a: iter) -> iter: singles = set() for x in a: if x not in singles: singles.add(x) return singlesSi on teste ces fonctions dans jupyter avec %timeit ...
... voici ce qu'on obtient :
On voit clairement que set est largement plus rapide. Et avec numpy :
... c'est encore plus rapide (car au lieu d'interpréter du code python, on passe par une librairie de calcul numérique optimisée) :
Bonne chance