2016-07-11 19 views
2

Ich muss CSV-Dateien Book1 und Book2. Die Spalten in Book1 sind A, B, C, D, E und in Book2 sind A, B, E, H. Ich möchte Book2 so ändern, dass es nur die Spaltennamen enthält, die mit Book1 und allen zusätzlichen in Book1 vorhanden sind. Die Dateien sind:Vergleichen Sie zwei CSV-Dateien und fügen Sie Spalten hinzu, die in beiden nicht üblich sind

Mappe1

A   B C D E 
10.12.0.1 a 35 0 11 
10.12.0.1 b 35 1 10 
107.77.87 a 35 0 101 

Book2:

A   B E H 
9.81.2  b 10 w 
10.15.32 b 100 w 
11.16.5 b 101 w 

Nach der Änderung der letzte Book2 wird: Book2_final:

A   B C D E 
9.81.2  b   10 
10.15.32 b   100 
11.16.5 b   101 

Ich habe versucht, die folgenden:

import pandas 
a= open('input_test.txt','r') 
csv1 = pandas.read_csv('Book2.csv',dtype='unicode') 
inserted_cols = a.read().split(',') 
csv1[inserted_cols].to_csv('Book2_test.csv',index=False) 

wobei die Datei 'input_test.txt' die Spalten von Book1 in der gleichen Reihenfolge enthält, getrennt durch Kommas. Aber ich bekomme Fehler:

KeyError: "['C' 'D' 'E\\n'] not in index" 

Kann nicht herausfinden, was falsch ist.Neu zu Python.

+0

Sie wollen keine der Aufzeichnungen (IP addrs) in Mappe1 im Book2_final sein? Wo erhalten Sie die Werte für die Spalte E, die in Book2_final eingegeben werden soll, wenn sie in Book1 nicht vorhanden sind? – aneroid

+0

@aneroid, Book2 nimmt keine Werte von Book1. Ich brauche nur die zusätzlichen Spaltennamen in Book1, um in Book2 zu sein, und entferne, was auch immer der zusätzliche Spaltenname in Book2 ist. In diesem Fall funktioniert die Spalte H –

Antwort

2

Verwenden Sie reindex auf book2 's Spalten mit book1' s Spalten. Sie müssen zuerst transponieren und dann zurück transponieren.

book2.T.reindex(book1.columns).T 

enter image description here

+0

. Versuchte es in einer Datei mit 1000 Spalten. Es ist effizient –

Verwandte Themen