Что означают эти ошибки networkx, которые я получаю после установки фильтра на моем фрейме данных pandas? - PullRequest
0 голосов
/ 16 июня 2019

У меня есть исходный, целевой и весовой фреймы данных, называемые 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')

Это сработало без проблем, и вот что я получил: enter image description here

Тем не менее, как только я пытаюсь отфильтровать все строки со значением счетчика ниже константы, скажем, 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.Строка, которая выдает ошибку, также находится там;закомментировано.

1 Ответ

0 голосов
/ 17 июня 2019

Эти строки ошибок дают хороший совет:

Файл "pandas_libs \ index.pyx", строка 132, в pandas._libs.index.IndexEngine.get_loc

KeyError:1

Проблема, похоже, заключается в том, что для передачи Gr_Team - фрейма данных с указанием node_size, width и edge_color требуется, чтобы индексы были последовательными.Использование

Gr_Team = Gr_Team[Gr_Team["count"] > 3 ].reset_index()

должно решить проблему.

...