反復

2017-05-26 16 views
1

介しパンダデータフレームにおける配列値の取り付けIは、次の例のようにアレイ内のエントリの列を持つパンダDATAFRAMEで働いている:反復

user_id tags 
0  1  [a,b,c] 
1  2  [a,b,d] 
2  3  [b,c] 
... 
n  n  [a,d] 

私は相関いくつかのタグIDを有します単純化されたJSONオブジェクト内のタグとは、以下の方法で自分の非簡素化変種を持つエントリを交換しようとしています:

for user_tags in dataset['tags']: 
    for tag in user_tags: 
     for full_tag in UUIDtags['tags_full']: 
      if full_tag['id'] == tag: 
       tag = entry['name'] 

idnameはJSONオブジェクトに単純化されたタグと完全なタグ名を対応しています。

ただし、これは実行時に値を変更しません。私はこれらの値を置き換えるために紛失しているパンダの方法はありますか?個々のエントリを置き換えるのではなく、配列全体を置き換えることになります。

ありがとうございました!

EDIT:JSONオブジェクト(UUIDtags)に含まれるものの例です。

{ 
    "tags_full": [{ 
     "id": "a", 
     "name": "Alpha" 
    }, { 
     "id": "b", 
     "name": "Beta" 
.... 
+0

'full_t'と' UUIDtags'のような他のデータを投稿できますか?情報の半分にアクセスしてアイデアをテストするのは難しいです... – spies006

+0

申し訳ありません!私は私の質問に、不整合のいくつかを修正しました、ありがとう。 – Kam

答えて

0

サンプルデータを作成します。

>>> df = pd.DataFrame({'tags':[list(['a', 'b', 'c']), 
list(['a', 'b', 'd']), list(['b', 'c'])], 'user_id': [i for i in range(1,4)]}) 

>>> df 
     tags user_id 
0 [a, b, c]  1 
1 [a, b, d]  2 
2  [b, c]  3 

文字としてキーを使用し、完全なタグを値として持つ置換辞書を生成します。さて

>>> replace_dict = {'a': 'Alpha', 'b': 'Beta', 'Charlie': 'c', 'Delta': 'd'} 

は、バック溶液に...​​に対応する値を使用して置き換え、各行の行と文字上の反復を行います。

>>> for row in range(len(df)): 
...  for tag in range(len(df.loc[row, 'tags'])): 
...    df.loc[row, 'tags'][tag] = replace_dict[df.loc[row, 'tags'][tag]] 
... 

結果は次のとおりです。

>>> df 
        tags user_id 
0 [Alpha, Beta, Charlie]  1 
1 [Alpha, Beta, Delta]  2 
2   [Beta, Charlie]  3 

サイドノート: ​​の作成は私のサンプルデータに表示された文字に基づいて、交換用の辞書のではなくアドホック作成しました。あなたの全データ用にそのような置換辞書を生成するには、これを行うことができます。例えば

、のはUUIDtagsは、あなたの完全なJSONオブジェクト

>>> UUIDtags = {'tags_full': [{'id':'a', 'name':'Alpha'}, {'id':'b', 'name':'Beta'}]} 

我々は交換用の辞書のこの世代は、あなたの全体のJSONオブジェクトに拡張されます。この

>>> uuidtags_dict = {} 
>>> for tag in UUIDtags['tags_full']: 
...  uuidtags_dict[tag['id']] = tag['name'] 
... 
>>> uuidtags_dict 
{'a': 'Alpha', 'b': 'Beta'} 

などの交換用辞書を生成することができていると仮定してみましょう編集で提供したサンプルに基づいています。

+0

詳細な対応をありがとう!私はあなたの治療法をかなり徹底的に理解していますが、実行時にLabel [7]が[index]にないというエラーメッセージ 'KeyError: 'が表示されます。私は今、エラーをデバッグしようとしています。 – Kam

+0

@Kamおそらく、 'dataset' ...' datasetのインデックスをリセットする必要があります。reset_index(inplace = True) ' – spies006

+0

あなたは正しいです、私はそこにそれがあると思いました!ありがとうございます - 今の魅力のように動作します! – Kam