关于StackOverflow的第一个问题。我找不到这个问题的其他例子,这让我相信我做错了什么。
我正在尝试从物料清单(BOM)数据创建树。首先,我只尝试设置基本的parent>child节点。
from anytree import Node, RenderTree, find_by_attr, NodeMixin
import pandas as pd
# Create Dataframe from csv file
df1 = pd.read_csv(r'filepath') # filepath only used for example
nodes = {} # Store created nodes
root = Node('root') # Setup root node
# Iterate over df and create parent/child nodes
for index, row in df1.iterrows():
pitem = row['EBPART'].strip() # get parent item number
citem = row['EBCOMP'].strip() # get child item number
nodes[pitem] = Node(pitem,parent=root) # create child node
nodes[citem] = Node(citem,parent=pitem) # create parent node
基本上,在迭代期间,我尝试创建父节点(这不会抛出错误),然后使用先前创建的节点作为其父节点来创建一个子节点。但是,我不断地收到这样的错误:
anytree.node.exceptions.TreeError: Parent node 'Product1' is not of type 'NodeMixin'.
这是rendertree(Root)的结果:
print(RenderTree(root))
Node('/root')
└── Node('/root/322601101')
以下是我正在阅读的csv的简化版本:
任何帮助都是非常感谢的!
发布于 2020-07-03 05:25:05
从这个Github Issue看,您似乎需要在根节点中显式地设置parent=None
。而且AnyNode
似乎也期望**kwargs。(我还没有读过文档,所以我不能同意)因此,您还应该修改您的pitem
和citem
。
发布于 2020-10-09 07:16:24
下面这行看起来不错:
其中node.name: str
和node.parent: Node
nodes[pitem] = Node(pitem,parent=root) # create child node
这个不是:
nodes[citem] = Node(citem,parent=pitem)
此处为node.name: str
而不是node.parent: str
,并且应为Node
类型
另外设置node.parent = None
或不设置完全相同。与**kwargs
类似,它只是可以为节点设置的附加属性,与您面临的错误没有任何关系。
实际上您需要首先声明根节点,但是您正在这样做,错误并不是因为该
https://stackoverflow.com/questions/62705151
复制相似问题