2017-01-02 25 views
0

辞書にデータを変換するIは、グラフに関する情報を表しExcelでいくつかのデータを持っており、それは次のようになりますのExcelから読み取り、パイソン

1 2 4.5 
1 3 6.6 
2 4 7.3 
3 4 5.1 

各行の最初の2つの要素であるエッジ最後の要素は、これらの2つのエッジ間の弧の重みです。例えば、エッジは、「1」「2」エッジに接続されており、重量は、私は、次のコードでのPythonにこのデータをインポート4.5

ある:

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 

training_data_x = pd.read_excel("/Users/mac/Downloads/navid.xlsx",header=None) 

x= training_data_x.as_matrix() 

ので、ここで隣接行列である「×」グラフの 私がやろうとしているのは、xを別のコードで必要とするPythonの辞書のリストに変換することです。 は、私は一種の新しいのpythonのですが、私はここに私のコードの出力である必要があり、「GR」ここに合った辞書は一種の実際にこの

gr = {'1': {'2': 4.5, '3': 6.6}, 
     '2': {'4': 7.3}, 
     '3': {'4':5.1}} 

のように見えると思います。 私は「」pandas.DataFrame.to_dict "を使うべきだと思う」私は、このコマンドを使用して、ハードの時間を持って、私は本当にここにあなたの助けに感謝

+0

一般に理解されているように、 'x'は実際には隣接行列です。 –

+0

はい。私はあなたが何を意味するかを見ます。しかし、上記のようにここでxを辞書に変換する方法は私の質問はまだありますか? – navid

答えて

0

私からのアドバイス:。。csvとしてあなたxlsxファイルを保存さて、バニラを使用。 Pythonの:おそらく

import csv 
gr = {} 
with open('data.csv') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     e1, e2, w = row 
     gr.setdefault(e1, {})[e2] = float(w) 

でも良く、defaultdict使用します

import csv 
from collections import defaultdict 
gr = defaultdict(dict) 
with open('data.csv') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     e1, e2, w = row 
     gr[e1][e2] = float(w) 

編集:私は手動でfloatに変換している、注意してください、しかし、あなたはおそらく、単純に目を渡して逃げることができますがあなたのキーが浮動しても構わない場合は、csv.readerの引数:csv.reader(f, quoting=csv.QUOTE_NONNUMERIC)に従ってください。

import pandas as pd 

file_path = "/Users/mac/Downloads/navid.xlsx" 
gr = pd.read_excel(file_path, header=None, index_col=0) \ 
    .groupby(level=0) \ 
    .apply(lambda x: dict(x.to_records(False))) \ 
    .to_dict() 

これを:あなたはパンダ偉大GROUPBY /スプリット/あなたが実際には次んでしたpandas.DataFrame.to_dict方法に加えて、(see more here)機能を組み合わせることに依存したい場合には

+0

ありがとうございます。私はあなたがフロートについて言及した最後の部分を逃しました。浮動小数点数に変換するとどういう意味ですか?この変換を迂回することについて私に説明して、私は何をすべきですか? – navid

+0

@navid文字列のキーとフロートの値が最も内側の辞書のために必要なのでしょうか?それはまさにあなたが書いたことです。 'csv'モジュールは自動変換を行いませんので、quotingパラメータを渡すことで*すべて*を浮動小数点に変換するか、または実証したように手作業で行うことができます。私は2番目のバージョンを使用します。 –

+0

@navidまた、あなたは気づいていないかもしれないバグをきれいにして、現在のバージョンをチェックしてください。 –

2

0.17以上のすべてのパンダバージョンで動作するはずです。

+0

あなたの 'apply'はとても巧妙でした。 –

関連する問題