【发布时间】:2017-08-16 17:35:20
【问题描述】:
我下面的代码应该使用 Networkx、Pandas 和 CSV 文件中的数据打印图形/网络。代码是 (networkx3.py) -
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 位 VM。感谢 @Adonis 帮助创建原始代码)
【问题讨论】:
-
你有
for i in row。第一次通过那个循环,你认为i的值是多少?也许尝试打印它以确定。下一个问题是为什么您希望row[i]在下一行有意义 - 您假设i的值在该语句中是什么?提示 - 错误消息告诉您列表索引不是整数。该语句中唯一像列表索引一样使用的东西是什么? -
感谢您回复@Joel。我实际上是 Python 的新手,因此我不太了解。我不明白你之前给出的提示。但我尝试打印
i,它们的值来自 CSV 文件。 -
希望您已经意识到
i就是您所期望的row[i]。 -
@Joel 没错。但是我仍然卡在代码中,无法继续前进:(。您可以提供更多建议吗?非常感谢您的帮助
-
所以你不应该对
row[i]做任何事情。到处都有row[i],你几乎肯定是指i。 [并且i是条目名称的错误选择 - 您应该使用更具描述性的名称]
标签: python-2.7 pandas csv networkx