2016-04-19 12 views
0

2つの別々のファイルに2つの列からの一意の値で構成される辞書を作成しました。これらの2つの列は、異なる形式の等価な値を持ち、したがって正しくマージされません。新しいデータフレームの列を作成するためのPython辞書

データフレーム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} 

最終製品は次のようになります。

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

残念ながら、私の結果を次のように

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 

私はpandas.Series.mapを使用しようとしました次のようになります。

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

私には何が欠けていますか?あなたの最初のデータフレームがあなたの辞書en「とA」と呼ばれていると仮定すると、

+0

'[" A "]'と 'd.keys()'の型が一致しない可能性はありますか? – ayhan

+0

タイプを印刷しました。["A"]は、を読み取り、d.keys()はを読み取ります。どのように私は彼らが一致するようにそれらを変更するだろうか? – geolish

答えて

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

は、あなたが動作するはずしようとしたものを理論的には「D」

+0

素晴らしい!助けてくれてありがとう! – geolish

0

と呼ばれています。ただし、s['A']の値の型には注意を払わなければならず、dのキーは等しく比較されないように注意しなければなりません。

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

、あなたが希望を取得:d.keys()はint型が含まれていながら、あなたは数値にs['A']を変換する場合のに対し、例えば、s['A']は、その後、

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) 

利回り

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 

を文字列が含まれている場合結果:

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

これは私の問題を解決するように聞こえますが、私のCの列はもう少し複雑です。値は "lsl0807b.201302"のバリエーションであるため、整数に変換することはできません。 – geolish

+0

「C」にどのような値を入れてもかまいません。重要なのは、 '' A '' 'の値が '' d' 'の* keys *と等しく比較されるということです。 – unutbu

関連する問題