0
votes

Python fusionnant deux CSV par colonne commune

J'essaie de fusionner deux fichiers CSV avec une colonne commune et de l'écrire dans un nouveau fichier. Par example Product.Csv Tableau aura des colonnes

with open('product.csv', 'r') as f:
r = csv.reader(f)

dict1 = {row[0]: row[1:] for row in r}

with open('subproduct.csv', 'r') as f:
r = csv.reader(f)

dict2 = {row[0]: row[1:] for row in r}


1 commentaires

Qu'est-ce que tu as essayé jusque-là? Veuillez toujours publier le code avec vos questions afin que nous puissions faire des suggestions / modifications à ce que vous faites et n'écrivez pas votre projet à partir de zéro.


6 Réponses :


0
votes

S'il vous plaît essayez ceci:

importer des pandas comme pd

sortie = pd.mérige (produit, sub_product, comment = 'externe', gauche_on = 'product_id', droite_on = 'product_id')

Il s'agit de deux cadres de données (produit et sub_product) par la colonne Product_ID qui est courante pour les deux. La jointure externe renvoie tous les enregistrements correspondant à la clé des deux cadres de données. Même comment = 'intérieure' aurait également travaillé dans ce cas


3 commentaires

s'il vous plaît expliquer un peu comme ce que c'est quoi et comment cela aidera


Il rejoint deux cadres de données (produit et sub_product) par colonne Product_ID qui est courante pour les deux. La jointure externe renvoie tous les enregistrements correspondant à la clé des deux cadres de données. Même comment = 'Inner' aurait également travaillé dans ce cas.


S'il vous plaît ajouter ça à vous de répondre



1
votes

Utiliser Pandas:

import pandas as pd

products_df = pd.read_csv('product.csv')
subproducts_df = pd.read_csv('subproduct.csv')

sales_df = pd.merge(products_df, subproducts_df, on=0)


0 commentaires

0
votes

Vous pouvez lire les données directement dans des fichiers de données Pandas, puis fusionner les deux dataframes: xxx

Cela fonctionne parfaitement pour votre exemple. Selon la façon dont vos données réelles ressemblent, vous devrez peut-être modifier certains des arguments supplémentaires de PD.MERGE.

EDIT: Ajout de la partie ECRIRE à CSV


0 commentaires

1
votes

Fusion avec des pandas

étape 1 forts>: premier PIP Installez des pandas si vous n'avez pas fait cela P>

Stage 2 STRY>: Création des données P>

df1=pd.read_csv('product.csv')
df2=pd.read_csv('subproduct.csv')


0 commentaires

1
votes

Vous pouvez travailler un script avec python pur. Il a une puissante libelle appelée CSV , qui devrait faire le tour Xxx

C'est l'idée principale, vous pouvez désormais enregistrer la sortie en CSV et ajouter des exceptions de manipulation d'en-tête.


3 commentaires

Vous pouvez seulement parcourir une fois qu'un lecteur de CSV. Vous devriez au moins utiliser: Subproduct_Reader = Liste (CSV.Reader (CSV.Reader (csv_subproduct, Delimiter = ','))) Pour enregistrer le résultat dans une liste et le traiter une fois par ligne à partir du premier fichier.


Je ne navigue qu'une seule fois, à l'intérieur des boucles.


pour P in ProDuto_Reader: Pour SP dans SubProduct_Reader: Vous essayez de parcourir sous-production pour chaque ligne de produto_reader



1
votes

D'autres ont proposé des moyens d'utiliser des pandas. Vous devez le considérer si vos fichiers sont grands ou si vous avez besoin de faire cette opération assez souvent. Mais le module CSV est suffisant ici.

Vous ne pouvez pas utiliser les dicts simples ici car les touches ne sont pas uniques: sous-production.csv code> a 2 lignes différentes avec le même ID 1. Donc, je voudrais donc utiliser des dicts de listes à la place. p>

Je vais admettre ici que toutes les touches doivent être présentes dans le produit.csv, mais certains sous-produits ne peuvent avoir aucun sous-produit associé (ce qui signifie une jointure externe gauche dans les formulures de base de données). P> alors je vais utiliser: p>

  • un dict pour produit.csv parce que je suppose que le produit_id est unique par produit li>
  • DefaultDict de listes de sous-produits.csv car un seul produit peut avoir de nombreux sous-produits li>
  • la liste des identifiants de produit.csv pour construire le fichier final li>
  • une liste vide par défaut pour sous-production.csv si un produit n'avait pas de sous-produits li>
  • et les en-têtes de traitement séparément li> ul>

    Code pourrait être: p> xxx pré>

    supposant que vos fichiers CSV sont des fichiers de valeurs séparés de virgule de virgule de virgule, cela donne: P>

    product_id,name,subproduct_name,volume
    1,Handwash,Dettol,20
    1,Handwash,Lifebuoy,50
    2,Soap,Lux,100
    


0 commentaires