Это неприятно. Так я обычно делаю это, чтобы не загружать другие пакеты:
levels(subdf$letters)<-c("a","b","c",NA,NA)
, который получает вас:
> subdf$letters
[1] a b c
Levels: a b c
Обратите внимание, что новые уровни заменят все, что занимает их индекс в старые значения (subdf $ letters), поэтому что-то вроде:
levels(subdf$letters)<-c(NA,"a","c",NA,"b")
не будет работать.
Это, очевидно, не идеально, когда у вас много уровней, но для Несколько, это быстро и легко.
Так что мне удалось решить мою проблему с Py2neo, но не проблему с Neomodel. Если я найду способ заставить Neomodel работать, я опубликую его и либо сделаю ссылку на этот пост, либо оставлю комментарий в этой теме.
Решение Py2neo с py2neo v4.0 и neo4j v3.o
Я пробовал различные комбинации, начиная с neo4j 2.3, вместе с различными версиями py2neo, такими как 3.1.2, а затем сделал то же самое с neo4j v3.0.
Я публикую свой сценарий, который использовал для создания узла и соединения с графом, так как я сходил с ума, пытаясь выяснить, плохо ли я настроил конфигурацию или была ли ошибка в пакете, драйвере и т. Д. [1112 ]
Скрипт Py2neo
from py2neo import Node, Relationship, Graph
graph = Graph('http://localhost:7474/db/data',user='neo4j',pass word='password1234')
tx = graph.begin()
a = Node(label='hero',name='Sabri')
tx.create(a)
tx.commit()
Устаревший драйвер py2neo v3.1.2 в тандеме с Neo4j v3.4
Как обсуждалось в этом Отчет о проблеме Github https://github.com/neo4j/neo4j-python-driver/issues/252 пользователь, который сообщил о проблеме, использовал py2neo 3.1.2 вместе с Neo4jv3.4. Подозрение было связано с устаревшим драйвером (v1.1), который поставлялся с py2neo 3.1.2. Новый дистрибутив Neo4j v3.4, похоже, поставляется с новым драйвером 1.6.
Обновление py2neo до v4.0 и использование последней версии сервера Neo4j, т.е. v3.4
При этом я столкнулся с другой ошибкой
File "/Users/sjamal/.conda/envs/py2neo.v4/lib/python3.6/site-packages/py2neo/internal/http.py", line 26, in <module>
from neo4j.addressing import SocketAddress
ModuleNotFoundError: No module named 'neo4j.addressing'
[1118 В этом потоке stackoverflow обсуждалось ( ModuleNotFoundError: нет модуля с именем 'neo4j.addressing' и ModuleNotFoundError: нет модуля с именем 'neo4j' ), что проблема может заключаться в том, что драйвер драйвера 1.6 может потребоваться вручную установил через пипс, что я и сделал.
pip install neo4j-driver==1.6.2
Теперь я получил новую ошибку, когда TypeError был перехвачен при вызове объекта карты.
File "/Users/sjamal/.conda/envs/py2neo.v4/lib/python3.6/site-packages/py2neo/internal/http.py", line 74, in fix_parameters
raise TypeError("Parameters of type {} are not supported".format(type(value).__name__))
TypeError: параметры карты типов не поддерживаются
Я обнаружил эту проблему с github, опубликованную speters-cmri https://github.com/technige/py2neo/issues/688 [ 117], который содержал следующий коммит github ( https://github.com/technige/py2neo/compare/v4...CMRI-ProCan:v4 ) для решения проблемы путем изменения скрипта json.py в пакете py2neo
я снова запустил свой скрипт, чтобы добавить тестовый узел, и он запустился без проблем.
Если вы слишком ленивы или просто слишком расстроены, чтобы пройти длинное объяснение, вот краткое изложение
1. Make sure neo4j v3.0+ is installed. I suggest you look into docker to install neo4j using a docker image
2. pip install py2neo==v4.0
3. pip install neo4j-driver==1.6.2
4. Modify json.py file as described here https://github.com/technige/py2neo/compare/v4...CMRI-ProCan:v4
5. Run py2neo script outlined above