关于StackOverflow的第一个问题。我没能找到这个问题的其他例子,这让我相信我做了一些不正确的事情
我正在尝试从物料清单(BOM)数据创建树。首先,我只是想得到基本的父母>;设置子节点
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(根)的结果:
print(RenderTree(root))
Node('/root')
└── Node('/root/322601101')
以下是我正在阅读的csv的简化版本:
非常感谢您的帮助
从这个Github Issue看来,您需要在根节点中显式地设置
parent=None
。而且似乎AnyNode
期望**夸尔格。(我没有阅读文档,所以我不能同意)因此您也应该修改您的pitem
和citem
下面这行看起来不错:
其中
node.name: str
和node.parent: Node
这个不是:
这里
node.name: str
但是node.parent: str
,并且应该是Node
类型另外,设置
node.parent = None
与否完全相同。 与**kwargs
的情况相同,这只是可以为节点设置的附加属性,与您面临的错误无关实际上,您需要首先声明根节点,但您正在这样做,错误并不是因为这个
相关问题 更多 >
编程相关推荐