繁体   English   中英

如何根据 for 循环中的 if 子句更改 pandas DataFrame 中的值

[英]How to change value in pandas DataFrame dependent on if clause in a for loop

我想分析一个兰花列表(input_df),如果它包含六个列表之一的兰花物种。 我从一个 xlsx 文件中导入这些列表,其中包含六张纸作为字典,其中包含作为 DataFrames (orchid_checklists) 的六个列表。

import pandas as pd
orchid_checklists = pd.read_excel('\\orchid_checklists.xlsx', sheet_name=None)
input_df = pd.read_excel('\\input.xlsx')
input_df['Orchideen-Checkliste'] = ''

使用以下带有 if 条件的 for 循环,我试图将清单的名称添加到与 ['Orchideen-Checkliste'] 列中 input_df['Input Name'] 中的项目相对应的字段中,以可视化应该查看的清单参考。

for item in input_df['Input Name']:
    for list_name, sheet in orchid_checklists.items():
        genus = item.split(' ')[0]
        if genus in sheet['referenced'].values:
            input_df['Orchideen-Checkliste'] = list_name
            
            
        else:
            pass

在我的测试输入列表中,应该找到一种名为“Bulbophyllum pachyrachis”的物种。 不幸的是,列表“CL_Bulbophyllum”的名称被放入所有行中。 我想不通为什么。

在下一步中,我想检查物种名称是否也在我的任一清单中的“例外”列中。 在这种情况下,这将不是正确的清单。 在这些情况下,完整的物种名称(例如“Aerangis ellisii”,参见下面的 CL_App_I 和 CL_III)可以在另一个列表的“参考”栏中找到。 我还没有开始编写这个异常,因为我之前仍然坚持这个部分,但是任何如何解决这个问题的指针都非常受欢迎。

这是输入数据:

    Input Name          Orchideen-Checkliste
0   Sobralia madisonii  
1   Stelis cocornaensis
2   Stelis gelida
3   Braemia vittata
4   Brassia escobariana
5   Aspasia silvana
6   Bulbophyllum maximum
7   Bulbophyllum pachyrachis
8   Chondroscaphe amabilis
9   Dresslerella hispida
10  Elleanthus sodiroi
11  Maxillaria mathewsii

兰花清单:

CL_III
       referenced        exceptions
0        Aerangis  Aerangis ellisii
1       Angraecum               NaN
2     Ascocentrum               NaN
3        Bletilla               NaN
4      Brassavola               NaN
5        Calanthe               NaN
6       Catasetum               NaN
7        Miltonia               NaN
8    Miltoniopsis               NaN
9      Renanthera               NaN
10  Renantherella               NaN
11  Rhynchostylis               NaN
12  Rossioglossum               NaN
13          Vanda               NaN
14      Vandopsis               NaN

CL_App_I
                referenced  exceptions
0            Paphiopedilum         NaN
1            Phragmipedium         NaN
2         Aerangis ellisii         NaN
3       Cattleya jongheana         NaN
4          Cattleya lobata         NaN
5      Dendrobium cruentum         NaN
6  Mexipedium xerophyticum         NaN
7         Peristeria elata         NaN
8   Renanthera imshootiana         NaN

CL_Bulbophyllum
      referenced  exceptions
0     Acrochaene         NaN
1   Bulbophyllum         NaN
2      Chaseella         NaN
3   Codonosiphon         NaN
4        Drymoda         NaN
5      Monomeria         NaN
6    Monosepalum         NaN
7   Pedilochilus         NaN
8   Succoglossum         NaN
9        Sunipia         NaN
10         Trias         NaN

预先感谢您的帮助!

input_df['Orchideen-Checkliste'] = list_name

为该列的每个项目分配一个值,因为您没有指定行索引器

无需过多更改您的流程:迭代时枚举input_df['Input Name']中的项目并使用枚举指定分配的行。

for index,item in enumerate(input_df['Input Name']):
    for list_name, sheet in orchid_checklists.items():
        genus = item.split(' ')[0]
        if genus in sheet['referenced'].values:
            input_df.loc[index,'Orchideen-Checkliste'] = list_name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM