2017-04-14 5 views
0

Ich habe zwei CSV-Dateien, eine CSV1 und die andere CSV2. In CSV1 ist eine große Liste von Daten wie folgt formatiert:Verwenden von Python zum Ausfüllen einer CSV-Datei mit Daten von einem anderen .csv

name, year 
Brian, 2016 
Lucy, 2016 
Bob, 2014 
Alen, 2012 

Dann in CSV2:

year, zodiac 
2016, Monkey 
2015, Goat 
2014, Horse 
2013, Snake 
2012, Dragon 

Ich möchte es in CSV1 machen, damit der Tierkreis für jede Person als eine zusätzliche Spalte wie diese erscheint :

name, year, zodiac 
Brian, 2016, Monkey 
Lucy, 2016, Monkey 
Bob, 2014, Horse 
Alen, 2012, Dragon 

ich denke, dass es möglich ist, dies mit der python-Pandas Bibliothek zu tun, aber ich habe in der Dokumentation verloren - irgendwelche Vorschläge wäre sehr dankbar!

+1

Eine gute Einführung in Pandas wäre das [10 Minuten Tutorial] (http://pandas.pydata.org/pandas-docs/stable/10min.html). Es wird dir fast alles geben, was du wissen musst. – tmrlvi

Antwort

2

Sie sollten map ausprobieren. Es macht es einfach tot:

import pandas as pd 
# Loads csv1 with default index 
df1 = pd.read_csv("csv1.csv") 
# Loads csv2 and sets the year as the index 
df2 = pd.read_csv("csv2.csv", index_col=0) 

df1["zodiac"] = df1["year"].map(df2["zodiac"]) 

df1.to_csv("output.csv") 

Beachten Sie, dass der Index der df2 das Jahr ist - so ist es im Wesentlichen in ähnlicher Weise zu einem Wörterbuch des Jahres-Zeichen verhält. map nimmt ein Wörterbuch oder pandas.Series als Nachschlagetabelle zu den Werten in der Spalte.

2

Klingt wie die df.join() Methode ist genau das, was Sie wollen! Sie werden in der Lage sein, die beiden Datenrahmen in der Spalte Jahr zu verbinden und sie dann wie gewünscht wieder in CSV zu exportieren.

1

Versuchen Sie folgendes:

import pandas as pd 

fn1 = r'/path/to/file1.csv' 
fn2 = r'/path/to/file2.csv' 

pd.merge(pd.read_csv(fn1, skipinitialspace=True), 
     pd.read_csv(fn2, skipinitialspace=True)) \ 
    .to_csv('/path/to/result.csv', index=False) 
+0

Sieht so aus, als ob du darauf achtest, was der OP wollte. – piRSquared

+0

@piRSquared, danke! Ich habe das Gefühl, dass du nie schläfst ;-) – MaxU

+0

in einem Taxi zurück zum Flughafen. Nicht wahr. Ich habe ungefähr 3 Stunden geschlafen – piRSquared

Verwandte Themen