首页 > 解决方案 > 使用 pandas 将结果打印到数据框中

问题描述

我有一个dataframe例如:

col1  col2  col3  ID 
A  23  AZ  ER1  ID1
B  12  ZE  EZ1  ID2
C  13  RE  RE1  ID3

我解析了 ID col 以获取一些信息,为了快速,对于每个 ID 我得到一些信息,这是代码的结果:

for i in dataframe['ID']:
    name = function(i,ranks=True)
    print(name)

{'species': 'rabbit', 'genus': 'unis', 'subfamily': 'logomorphidae', 'family': 'lego', 'no rank': 'info, nothing', 'superkingdom': 'eucoryote'}
{'species': 'dog', 'genus': 'Rana', 'subfamily': 'Alphair', 'family': 'doggidae', 'no rank': 'dsDNA , no  stage', 'superkingdom': 'eucaryote'}
{'species': 'duck', 'subfamily': 'duckinae', 'family': 'duckidae'}
...

如您所见,它是字典返回。正如您还可以看到,对于 ID 1 和 2,我得到(species, genus, subfamily, family,no rank,superkingdom) 了 ID 3 的 6 条信息,我只得到 3 条信息,其想法不仅仅是打印 dic 内容,而是直接将其添加到dataframe并获取:

col1  col2  col3 ID  species   genus    subfamily      family     no rank           superkingdom
A  23  AZ  ER1  ID1  rabbit    unis     logomorphidae  lego       info, nothing,    eucaryote
B  12  ZE  EZ1  ID2  dog       Rana     Alphair        doggidae   dsDNA , no stage  eucaryote 
C  13  RE  RE1  ID3  duck      None     duckinae       duckidae   None              None 

你有想法用熊猫做吗?谢谢你的帮助。

标签: python-3.xpandas

解决方案


将您的输出存储在 a dictof 中dicts,以便轻松创建 aDataFrame并将其加入。

d = {}
for i in dataframe['ID']:
    d[i] = taxid.lineage_name(i, ranks=True)

df.merge(pd.DataFrame.from_dict(d, orient='index'), left_on='ID', right_index=True)

输出:

   col1 col2 col3   ID species genus      subfamily    family            no rank superkingdom
A    23   AZ  ER1  ID1  rabbit  unis  logomorphidae      lego      info, nothing    eucoryote
B    12   ZE  EZ1  ID2     dog  Rana        Alphair  doggidae  dsDNA , no  stage    eucaryote
C    13   RE  RE1  ID3    duck   NaN       duckinae  duckidae                NaN          NaN

推荐阅读