2016-04-19 6 views
0

Ich erstellte ein Wörterbuch bestehend aus eindeutigen Werten aus zwei Spalten in zwei separaten Dateien. Diese beiden Spalten haben äquivalente Werte, die unterschiedlich formatiert sind und deshalb nicht korrekt zusammengeführt werden.Python-Wörterbuch zum Erstellen neuer Datenrahmenspalte

Datenrahmen A:

A B 
1 dfg 
2 srg 
3 sgf 
4 sfh 
3 srg 
6 srg 
1 sfg 

d={1: 1.102832, 
    2: 2.102832, 
    3: 3.102832, 
    4: 4.102832, 
    5: 5.102832, 
    6: 6.102832, 
    7: 7.102832} 

Endprodukt sollte wie folgt aussehen:

A B  C 
1 dfg 1.102832 
2 srg 2.102832 
3 sgf 3.102832 
4 sfh 4.102832 
3 srg 3.102832 
6 srg 6.102832 
1 sfg 1.102832 

ich pandas.Series.map verwenden wollte, wie folgt:

s["C"]=s["A"].map(dictionary) 

leider mein Ergebnis sieht so aus:

A B  C 
1 dfg NaN 
2 srg NaN 
3 sgf NaN 
4 sfh NaN 
3 srg NaN 
6 srg NaN 
1 sfg NaN 

Was fehlt mir?

+0

Ist es möglich, dass die Typen von 's [" A "]' und 'd.keys()' nicht übereinstimmen? – ayhan

+0

Ich druckte die Typen und s ["A"] liest: während d.keys() liest . Wie würde ich sie ändern, damit sie zusammenpassen? – geolish

Antwort

0
for key,value in d.iteritems(): 
    A.ix[A['A']==key,'C'] = value 

Vorausgesetzt, dass Sie Ihre erste Datenrahmen ist ‚A‘ en Ihr Wörterbuch genannt genannt wird ‚d‘

+0

Fantastisch! Danke für die Hilfe! – geolish

0

Theoretisch was Sie versucht funktionieren sollte. Sie müssen jedoch sorgfältig auf die Typen der Werte in und die Schlüssel in d achten, damit sie nicht gleichwertig sind. Zum Beispiel, wenn s['A'] enthält Strings, während d.keys() Ints enthält, dann

import pandas as pd 
d = {1: 1.102832, 
    2: 2.102832, 
    3: 3.102832, 
    4: 4.102832, 
    5: 5.102832, 
    6: 6.102832, 
    7: 7.102832} 

s = pd.DataFrame({ 
    'A':'1 2 3 4 3 6 1'.split(), 
    'B':'dfg srg sgf sfh srg srg sfg'.split()}) 

s['C'] = s['A'].map(d) 
print(s) 

Ausbeuten

A B C 
0 1 dfg NaN 
1 2 srg NaN 
2 3 sgf NaN 
3 4 sfh NaN 
4 3 srg NaN 
5 6 srg NaN 
6 1 sfg NaN 

während, wenn Sie s['A'] numerische Werte konvertieren:

s['A'] = pd.to_numeric(s['A'], errors='coerce') 
s['C'] = s['A'].map(d) 
print(s) 

dann erhalten Sie die gewünschte Ergebnis:

A B   C 
0 1 dfg 1.102832 
1 2 srg 2.102832 
2 3 sgf 3.102832 
3 4 sfh 4.102832 
4 3 srg 3.102832 
5 6 srg 6.102832 
6 1 sfg 1.102832 
+0

Das hört sich so an, als würde es mein Problem lösen, aber meine C-Spalte ist ein wenig komplizierter als ich es anmerke. Die Werte sind Variationen von "lsl0807b.201302" und können daher nicht in ganze Zahlen konvertiert werden. – geolish

+0

Es spielt keine Rolle, welche Werte Sie in 'C' haben möchten. Wichtig ist, dass die Werte in 's '(' was auch immer sie sein mögen ') mit' keys 'in' d 'gleichgesetzt werden. – unutbu

Verwandte Themen