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.
3 Réponses :
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)
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")
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.
Voici comment nous pouvons le faire étape par étape
Hypothèse: vous avez tous les fichiers csv dans un dossier.
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
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)
['1.csv', '2.csv', '3.csv']
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?
Utilisez le paramètre 'axis = 1' avec pd.concat () pour créer des tableaux larges:
pd.concat ([df1, df2, df3], axis = 1)