9
votes

Python: comparer des colonnes spécifiques dans deux fichiers CSV

dire que j'ai deux fichiers CSV (fichier1 et fichier2) avec des contenus, comme indiqué ci-dessous:

File1: p> xxx pré>

fichier2: p>

fred,39,Male,"23,45",blue,"1, bedrock avenue"


2 commentaires

À propos de Edit2: Il suffit d'utiliser importer csv et tout ira bien.


@ulidtko oui, appréciez cela. Je ne voulais pas être normatif si au cas où il y avait une autre solution que je ne connaissais pas.


4 Réponses :


10
votes

Je suppose que les meilleurs moyens sont d'utiliser Python Bibliothèque: http://docs.python.org /library/csv.html .

mise à jour (exemple ajouté) : xxx


4 commentaires

Pourriez-vous donner un exemple s'il vous plaît?


@Elalfer j'aime ça, mais ça ne compare pas Col 0 le fait-il?


@ CODER999 OH VRAI, vous avez demandé à comparer tous les champs mais 1er. Exemple mis à jour


@Elafer, @ coder999: bug si (rangée1 [0] == Row2 [0]) et (rangée [2:] == ligne [2:]): devrait être si (rangée1 [0] == Row2 [0]) et (rangée1 [2:] == Row2 [2:]):



1
votes

Je lirais les deux enregistrements, éliminerait la colonne 1 et le comparer ce qui reste. (Dans Python3 Works)

import csv
file1 = csv.reader(open("file1.csv", "r"))
file2 = csv.reader(open("file2.csv", "r"))
r1 = next(file1)
r1.pop(1)
r2 = next(file2)
r2.pop(1)
return r1 == r2


2 commentaires

Cela ne fonctionnerait pas à cause des virgules intégrées dans les valeurs


Vous auriez dû soumettre une autre réponse plutôt que de réécrire complètement celle-ci.



6
votes
import csv

interesting_cols = [0, 2, 3, 4, 5]

with open("file1.csv", 'r') as file1,\
     open("file2.csv", 'r') as file2:

    reader1, reader2 = csv.reader(file1), csv.reader(file2)

    for line1, line2 in zip(reader1, reader2):
        equal = all(x == y
            for n, (x, y) in enumerate(zip(line1, line2))
            if n in interesting_cols
        )
        print(equal)

2 commentaires

Je suis nouveau pour cela et c'est vraiment serviable pour moi, j'ai atteint ce que je voulais mais au lieu d'index! pouvons-nous utiliser des noms de colonnes pour la compression? Si oui, comment? Pourriez-vous s'il vous plaît guider


@Ravik Oui Il est possible d'utiliser les noms de colonnes. Veuillez consulter la documentation et des exemples officiels pour intégré CSV Module .



1
votes
# Include required modules

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Include required csv files

df_TrainSet = pd.read_csv('../data/ldp_TrainSet.csv')
df_DataSet = pd.read_csv('../data/ldp_DataSet.csv')


# First test
[c for c in df_TrainSet if c not in df_DataSet.columns]

# Second test
[c for c in df_DataSet if c not in df_TrainSet.columns]
With this example I check both CSV files whether the columns in both files are present in each other.

0 commentaires