2017-08-16 65 views
-1

我的代碼如下應該使用Networkx,Pandas和來自CSV文件的數據打印圖形/網絡。該代碼是(networkx3.py) -Python Networkx和熊貓庫不工作

import csv 
import matplotlib.pyplot as plt 
import pandas as pd 
import networkx as nx 

g = nx.Graph() 
csv_dict = pd.read_csv('Book1.csv', index_col=[0]) 
csv_1 = csv_dict.values.tolist() 

ini = 0 
for row in csv_1: 
    for i in row: 
     if type(row[i]) is str: 
      g.add_edge(ini, int(i), conn_prob=(float(row[i]))) 

    max_wg_ngs = sorted(g[ini].items(), key=lambda e: e[1]["conn_prob"], reverse=True)[:2] 
    sarr = [str(a) for a in max_wg_ngs] 
    print "Neighbours of Node %d are:" % ini  
    #print(max_wg_ngs) 
    for item in sarr: 
     print ''.join(str(item))[1:-1] 

    ini += 1 

pos = nx.spring_layout(g, scale=100.) 
nx.draw_networkx_nodes(g, pos) 
nx.draw_networkx_edges(g, pos) 
nx.draw_networkx_labels(g, pos) 
#plt.axis('off') 
plt.show() 

在CSV文件中的數據(Book1.csv) -

,1,2,3,4,5,6,7,8,9,10 
1,0,0.257905291,0.775104118,0.239086843,0.002313744,0.416936603,0.194817214,0.163350301,0.252043807,0.251272559 
2,0.346100279,0,0.438892758,0.598885794,0.002263231,0.406685237,0.523850975,0.257660167,0.206302228,0.161385794 
3,0.753358102,0.222349243,0,0.407830809,0.001714776,0.507573592,0.169905687,0.139611318,0.187910832,0.326950557 
4,0.185342928,0.571302688,0.51784403,0,0.003231018,0.295197533,0.216184462,0.153032751,0.216331326,0.317961522 
5,0,0,0,0,0,0,0,0,0,0 
6,0.478164621,0.418192795,0.646810223,0.410746629,0.002414973,0,0.609176897,0.203461461,0.157576977,0.636747837 
7,0.24894327,0.522914349,0.33948832,0.316240267,0.002335929,0.639377086,0,0.410011123,0.540266963,0.587764182 
8,0.234017887,0.320967208,0.285193773,0.258198079,0.003146737,0.224412057,0.411725737,0,0.487081815,0.469526333 
9,0.302955306,0.080506624,0.261610132,0.22856311,0.001746979,0.014994905,0.63386228,0.486096957,0,0.664434415 
10,0.232675407,0.121596312,0.457715027,0.310618067,0.001872929,0.57556548,0.473562887,0.32185564,0.482351246,0 

代碼但不起作用。我不明白我要去哪裏錯了。錯誤是 -

Traceback (most recent call last): 
    File "networkx3.py", line 13, in <module> 
    if type(row[i]) is str: 
TypeError: list indices must be integers, not float 

我不想修改CSV文件或其數據。索引列和標題應該被忽略。
我以前問過這個問題,但我沒有得到滿意的答案。任何人都可以幫忙嗎?
提前致謝:)(使用Ubuntu 14.04 32位虛擬機。致信@Adonis幫助創建原始代碼)

+1

你有'爲我行'。通過這個循環第一次,你認爲'i'的價值是什麼?也許嘗試打印它是肯定的。接下來的問題是,你爲什麼期望'row [i]'在下一行有意義 - 你假設'i'的值在那個語句中?提示 - 錯誤消息告訴你列表索引不是一個整數。在這個聲明中,唯一使用像列表索引那樣的東西是什麼? – Joel

+0

感謝您回覆@Joel。我實際上是Python的新手,因此我不知道很多。我不明白你先前給出的提示。但我嘗試打印'i',它們的值來自CSV文件。 – user136819

+0

所以希望你已經意識到'i'是你期望'row [i]'的意思。 – Joel

回答

0

回答我自己的問題有點遲,但有一些寶貴的幫助來自@喬爾和@Adonis,我終於明白我錯在哪裏。
問題發生在第二個for循環中,我試圖將float的值作爲string傳遞給Graph,這給了我一個錯誤。其他細微的變化會導致輸出,但沒有任何邊緣,只是節點。
最後,在使用enumerate函數定義連接節點(使用其索引給出功率)後,我得到了所需的輸出。唯一要做出的改變是在第2 for環和if條件:
for row in csv_1: for idx, i in enumerate(row): if type(row[idx]) is float: g.add_edge(ini, idx, conn_prob=(float(row[idx])))

由於在SOF所有無私的球員的幫助,不能做它沒有你:)