1
votes

Comment fusionner plusieurs CSV sans nom de colonne comme en-têtes en python?

J'ai 7 CSV et je souhaite les fusionner en fonction de l'identifiant, voici l'exemple illustré ci-dessous:

CSV1:

101, A, B, C, D, E, F, J, K, L
102, A, B, C, D, E, F, J, K, L

CSV2:

101, J, K, L
102, J, K, L

CSV3:

101, E, F
102, E, F

CSV consolidé dont j'ai besoin:

101, A, B, C, D               
102, A, B, C, D

Le CSV n'a pas de nom de colonne ni d'en-têtes.

J'ai essayé d'utiliser pandas merge and concat mais cela ne semble pas fonctionner car il multiplie les champs. Veuillez aider.


1 commentaires

Utilisez le paramètre 'axis = 1' avec pd.concat () pour créer des tableaux larges: pd.concat ([df1, df2, df3], axis = 1)


3 Réponses :


0
votes

Disons que tous les fichiers sont à l'intérieur du répertoire.

import pathlib, pandas as pd

path = pathlib.Path("path to directory")

conslidated_df = pd.concat([pd.read_csv(file_,header=None).set_index(0) for file_ in path.iterdir()],axis=1)


0 commentaires

1
votes
for idx, df in enumerate(dataframes):
   if idx == 0:
       merged_df = dataframe[1] #df2
   merge_total = pd.merge(df, merged_df, how="inner", on="id")

1 commentaires

Bien que ce code puisse résoudre la question, y compris une explication expliquant comment et pourquoi cela résout le problème aiderait vraiment à améliorer la qualité de votre post, et entraînera probablement plus de votes à la hausse. N'oubliez pas que vous répondez à la question des lecteurs à l'avenir, pas seulement à la personne qui la pose maintenant. Veuillez modifier votre réponse pour ajouter des explications et donner une indication des limitations et hypothèses applicables.



0
votes

Voici comment nous pouvons le faire étape par étape

Hypothèse: vous avez tous les fichiers csv dans un dossier.

Étape 1. Obtenir le chemin de tous les fichiers csv

XXX

Exemple de sortie ressemble à:

      1   2   3   4   1   2   1   2   3
0                                      
101   A   B   C   D   E   F   J   K   L
102   A   B   C   D   E   F   J   K   L

Étape 2: lire tous les csv et les concaténer

combined_df=pd.DataFrame()

for df_name in df_list:
    df=pd.read_csv(os.path.join(csv_folder,df_name),header=None,index_col=0)
    combined_df=pd.concat([combined_df,df],axis=1)

Le df final ressemble à

['1.csv', '2.csv', '3.csv']


4 commentaires

Merci pour votre réponse détaillée, mais quand j'ai implémenté ceci: augmenter ValueError (f "La forme des valeurs passées est {passée}, les indices impliquent {implicite}") ValueError: La forme des valeurs passées est (52205, 6), les indices impliquent ( 52175, 6)


Je pense que c'est à cause du problème d'index. Si un index en double est présent, cette erreur peut se produire. Pouvez-vous ajouter un print (df_name) dans la boucle et partager le CSV qui crée l'erreur.


il lance une erreur lors de la lecture du deuxième fichier, pfb les données que j'ai et dont j'ai besoin: - file1-101, Y, 1999-07-01 00: 00: 00.0, file2-101, 00000004, 2004-01-01 00: 00: 00.0, fichier_final - 101, Y, 1999-07-01 00: 00: 00.0, 00000004, 2004-01-01 00: 00: 00.0,


Il ne jette aucune erreur lorsque j'essaye de l'exécuter et donne la même chose que final_file. pouvez-vous simplement lire le fichier1 et le fichier2 séparément en utilisant pd.read_csv ('filepath') et vous assurer qu'aucune erreur ne se produit dans le formatage csv?