У меня есть исходный, целевой и весовой фреймы данных, называемые Gr_Team
, которые выглядят так (пример) -
Passer Receiver count
116643 102747 27
102826 169102 10
116643 102826 7
167449 102826 8
102747 167449 4
У каждого Passer и Receiver есть свои уникальные координаты x, y, которые у меня есть всловарь loc
- {'102739': [32.733999999999995, 26.534], '102747': [81.25847826086964, 27.686739130434784], '102826': [68.09609195402302, 77.52206896551728]}
Я построил это с помощью networkx:
G=nx.from_pandas_edgelist(Gr_Team, 'Passer', 'Receiver', create_using=nx.DiGraph())
nx.draw(G, loc, with_labels=False, node_color='red',
node_size=Gr_Team['count']*100,
width=Gr_Team['count'],
edge_color = Gr_Team["count"],
edge_cmap = cmap,
arrowstyle='->',
arrowsize=10,
vmin=vmin,
vmax=vmax,
font_size=10,
font_weight="bold",
connectionstyle='arc3, rad=0.1')
Это сработало без проблем, и вот что я получил:
Тем не менее, как только я пытаюсь отфильтровать все строки со значением счетчика ниже константы, скажем, 3, используя это Gr_Team = Gr_Team[Gr_Team["count"]>3]
, я получаю ключевую ошибку и вот всю ошибку и трассировку, которую я ничего не могу разобратьиз:
Warning (from warnings module):
File "C:\Users\ADMIN\AppData\Local\Programs\Python\Python37\lib\site-packages\networkx\drawing\nx_pylab.py", line 676
if cb.iterable(node_size): # many node sizes
MatplotlibDeprecationWarning:
The iterable function was deprecated in Matplotlib 3.1 and will be removed in 3.3. Use np.iterable instead.
Traceback (most recent call last):
File "C:\Users\ADMIN\AppData\Local\Programs\Python\Python37\PassMapOptaF24Networkx.py", line 148, in <module>
font_weight="bold")#,
File "C:\Users\ADMIN\AppData\Local\Programs\Python\Python37\lib\site-packages\networkx\drawing\nx_pylab.py", line 128, in draw
draw_networkx(G, pos=pos, ax=ax, **kwds)
File "C:\Users\ADMIN\AppData\Local\Programs\Python\Python37\lib\site-packages\networkx\drawing\nx_pylab.py", line 280, in draw_networkx
edge_collection = draw_networkx_edges(G, pos, arrows=arrows, **kwds)
File "C:\Users\ADMIN\AppData\Local\Programs\Python\Python37\lib\site-packages\networkx\drawing\nx_pylab.py", line 684, in draw_networkx_edges
arrow_color = edge_cmap(color_normal(edge_color[i]))
File "C:\Users\ADMIN\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\series.py", line 868, in __getitem__
result = self.index.get_value(self, key)
File "C:\Users\ADMIN\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\indexes\base.py", line 4375, in get_value
tz=getattr(series.dtype, 'tz', None))
File "pandas\_libs\index.pyx", line 81, in pandas._libs.index.IndexEngine.get_value
File "pandas\_libs\index.pyx", line 89, in pandas._libs.index.IndexEngine.get_value
File "pandas\_libs\index.pyx", line 132, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\hashtable_class_helper.pxi", line 987, in pandas._libs.hashtable.Int64HashTable.get_item
File "pandas\_libs\hashtable_class_helper.pxi", line 993, in pandas._libs.hashtable.Int64HashTable.get_item
KeyError: 1
Я понял, что выполнение только nx.draw(G, loc, with_labels=False, node_color='red')
все еще работает, но как только я пытаюсь передать node_size
или edge_color
, он сталкивается с вышеуказанной ошибкой.Насколько я понимаю, ошибка возникает только тогда, когда я использую фрейм данных Gr_Team
в качестве аргументов ключевого слова.
Я не могу понять, почему это происходит и почему фильтрация нарушает код.Любая помощь будет оценена.
РЕДАКТИРОВАТЬ 1 : Здесь суть всего кода.Я старался изо всех сил, чтобы сохранить его минимальным. Здесь - это ссылка на CSV-файл, который нужно прочитать как df.Строка, которая выдает ошибку, также находится там;закомментировано.