2016-08-03 10 views
2

Ich verwende os, um die Dateinamen in einem Verzeichnis aufzulisten. Ich verwende auch Pandas, um den Inhalt einer Spalte in einer CSV-Datei aufzulisten. Ich habe die Ergebnisse von beiden gedruckt und möchte nun die Namen, die in beiden Ausdrucken erscheinen, abgleichen und auch angeben, welche Namen für einen Druck exklusiv sind. Unten ist mein Code, der die Namen und den Inhalt der CSV-Datei enthält.Gleichen Wörtern in zwei Drucken

import os, sys 
import pandas as pd 


path = "/mydir/csvfile" 
dirs = os.listdir(path) 

for file in dirs: 
    print file 

fields = ['Column'] 

df = pd.read_csv('/mydir/csv_file', skipinitialspace=True, usecols=fields) 

print df.Column 

* EDIT *

Ich habe mit dieser Lösung kommen, die funktioniert.

import os, sys 
import pandas as pd 


path = "/mdir/csvfile" 
dirs = os.listdir(path) 

list_1 = [file for file in dirs] 



fields = ['column'] 

df =  pd.read_csv('/mydir/csvfile', skipinitialspace=True, usecols=fields) 

list_2 = df.column.values.tolist() 

list_3=[] 


for i in list_1: 
    if i in list_2: 
     list_3.append(i + " True") 
    else: 
     list_3.append(i + " False") 

print list_3 
+0

Realisiert habe ich vergessen wirklich enthalten eine Frage. Wie würde ich das machen, gibt es eine Möglichkeit, beide Drucke miteinander zu vergleichen? –

+0

nicht drucken, speichern Sie diese Werte in Variablen und vergleichen Sie diese Variablen. –

Antwort

2

Statt

for file in dirs: 
    print file 

Erstellen Sie eine Liste:

files = [file for file in dirs] 

dann die Datenrahmen verwenden zu überprüfen:

df.Column.isin(files) # this will check elementwise 
Out: 
0 True 
1 True 
2 True 
3 True 
Name: Column, dtype: bool 

Oder

df.Column.isin(files).all() # if all of them are the same 
Out: True 
+0

Das hat funktioniert, danke! –

+0

Gern geschehen. Beachten Sie, dass dies fehlschlagen kann, wenn 'Dateien' zusätzliche Dateien enthalten. Sie können den Vergleich anders herum durchführen: 'pd.Series (files) .isin (df.Column)', um sicher zu gehen. – ayhan

+0

Weißt du, wie ich das schaffen könnte, um das Element immer noch zusammen mit wahr oder falsch zu geben? Beispiel: 0 12fhaj True, 1 757dyah False, 2 fhjf8282 Wahr ... –

1

So wie ich es verstehe, haben Sie zwei Listen. Einer aus dem Verzeichnis und ein anderer aus einer Spalte in Pandas. Sie möchten die Elemente, die sich in beiden Listen befinden, sowie die Elemente, die für jede Liste eindeutig sind. Nehmen wir an, Ihre Listen wie diese sind:

List1 = ['a' , 'b' , 'c' , 'd', 'e', 'f'] 
List2 = ['c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i'] 

Dann wird Ihr Code zu produzieren, was ich denke, Sie könnten Listenkomprehensionen verwenden wollen, und gehen Sie wie folgt aus:

overlap = [i for i in List1 if i in List2] 
nonOverlapList1 = [j for j in List1 if j not in overlap] 
nonOverlapList2 = [k for k in List2 if k not in overlap] 
Verwandte Themen