在数据框中动态创建列名的问题
problem with creating column name dynamically in a dataframe
我正在尝试动态创建一个 pandas 数据框。到目前为止,我可以在数据框中捕获数据,但不能捕获列名。
我还希望列的名称基于我在函数中读取的记录附带的数据 'category',但我总是得到最后一个。
def funct_example(client):
documents = [ v_document ]
poller = client.begin_analyze_entities(documents)
result = poller.result()
docs = [doc for doc in result if not doc.is_error]
i = 1
df_final = pd.DataFrame()
for idx, doc in enumerate(docs):
for relation in doc.entity_relations:
for role in relation.roles:
name = str([format(entity.category)]) + str(i) # <---- THIS LINE ALWAYS IS THE LAST REGISTER
d = {name : "'{}' with entity '{}'".format(role.name, role.entity.text)} # <---THIS IS OK
df = pd.DataFrame(data=d, index=[0])
df_final = pd.concat([df_final, df], axis=1)
i = i + 1
display(df_final)
return(df_final)
df_new_2 = funct_example(client)
我试过在创建数据框语句和 concat 函数之间添加一个额外的循环,如下所示:
for col in df.columns:
name = str([format(entity.category)]) + str(i)
df = df.rename(columns={col: name })
但是最后一个类别仍然出现在列名中...
我该如何解决?
从已经非常感谢你。
解决方案:
for idx, doc in enumerate(docs):
for relation in doc.entity_relations:
for role in relation.roles:
name = 'Relation_' + format(relation.relation_type) + '_' + str(i)
d = {name : "'{}' with entity '{}'".format(role.name, role.entity.text)}
df = pd.DataFrame(data=d, index=[0])
df_final = pd.concat([df_final, df], axis=1)
i = i + 1
display(df_final)
return(df_final)
df_relations = funct_example(client)
问候!! :D
如果不知道所使用的所有对象的属性,很难提出解决方案。
'entity'对象,没有在函数内部定义,所以是全局变量吗?
角色有'entity',然后有'category'属性?我是这样假设的,因为角色确实有实体 属性
d = {name : "'{}' with entity '{}'".format(role.name, role.entity.text)} # <---THIS IS OK
此外,初始化时的name变量没有被使用
也许你试试
name = str([format(role.entity.category)]) + str(i)
我正在尝试动态创建一个 pandas 数据框。到目前为止,我可以在数据框中捕获数据,但不能捕获列名。
我还希望列的名称基于我在函数中读取的记录附带的数据 'category',但我总是得到最后一个。
def funct_example(client):
documents = [ v_document ]
poller = client.begin_analyze_entities(documents)
result = poller.result()
docs = [doc for doc in result if not doc.is_error]
i = 1
df_final = pd.DataFrame()
for idx, doc in enumerate(docs):
for relation in doc.entity_relations:
for role in relation.roles:
name = str([format(entity.category)]) + str(i) # <---- THIS LINE ALWAYS IS THE LAST REGISTER
d = {name : "'{}' with entity '{}'".format(role.name, role.entity.text)} # <---THIS IS OK
df = pd.DataFrame(data=d, index=[0])
df_final = pd.concat([df_final, df], axis=1)
i = i + 1
display(df_final)
return(df_final)
df_new_2 = funct_example(client)
我试过在创建数据框语句和 concat 函数之间添加一个额外的循环,如下所示:
for col in df.columns:
name = str([format(entity.category)]) + str(i)
df = df.rename(columns={col: name })
但是最后一个类别仍然出现在列名中...
我该如何解决?
从已经非常感谢你。
解决方案:
for idx, doc in enumerate(docs):
for relation in doc.entity_relations:
for role in relation.roles:
name = 'Relation_' + format(relation.relation_type) + '_' + str(i)
d = {name : "'{}' with entity '{}'".format(role.name, role.entity.text)}
df = pd.DataFrame(data=d, index=[0])
df_final = pd.concat([df_final, df], axis=1)
i = i + 1
display(df_final)
return(df_final)
df_relations = funct_example(client)
问候!! :D
如果不知道所使用的所有对象的属性,很难提出解决方案。
'entity'对象,没有在函数内部定义,所以是全局变量吗?
角色有'entity',然后有'category'属性?我是这样假设的,因为角色确实有实体 属性
d = {name : "'{}' with entity '{}'".format(role.name, role.entity.text)} # <---THIS IS OK
此外,初始化时的name变量没有被使用
也许你试试
name = str([format(role.entity.category)]) + str(i)