【问题标题】:Returning values based on letters in a string using Python 2.7使用 Python 2.7 根据字符串中的字母返回值
【发布时间】:2018-08-14 00:43:32
【问题描述】:

如果找到某些字母(虽然不是确切的单词),我会尝试返回一个特定的值。开始于:

data = {'ANIMAL':['LION', 'BLACK BEAR', 'BROWN BEAR']}
df = pd.DataFrame(data)
df
    ANIMAL
0   LION
1   BLACK BEAR
2   BROWN BEAR

一开始,当找到 'BEAR' 时,Python 会正确返回 '30'。

df['FOOD PER DAY (KG)'] = df['ANIMAL'].str.contains('BEAR') 
df['FOOD PER DAY (KG)'] = df['FOOD PER DAY (KG)'].map({True: '30', False: ''})
df
    ANIMAL      FOOD PER DAY (KG)
0   LION    
1   BLACK BEAR  30
2   BROWN BEAR  30

不幸的是,当找到 'LION' 时,False:'' 会覆盖之前确定的 '30'。

df['FOOD PER DAY (KG)'] = df['ANIMAL'].str.contains('LION') 
df['FOOD PER DAY (KG)'] = df['FOOD PER DAY (KG)'].map({True: '20', False: ''})
df
    ANIMAL      FOOD PER DAY (KG)
0   LION        20
1   BLACK BEAR  
2   BROWN BEAR  

有没有办法让这个返回:

    ANIMAL      FOOD PER DAY (KG)
0   LION        20
1   BLACK BEAR  30
2   BROWN BEAR  30

谢谢。仅供参考,这实际上不适用于动物。

【问题讨论】:

    标签: string python-2.7 contains


    【解决方案1】:

    谢谢,A2A。 好,我们去观察坑洞在哪里。! 第一次操作后:-

    检查中 ?

    • FOOD PER DAY (KG) 中的所有 True 值都将替换为 30 和

    • FOOD PER DAY (KG) 字段中的所有 False 值都替换为 ' '

    目前的输出是:

       ANIMAL       FOOD PER DAY (KG)
    0  LION                  
    1  BLACK BEAR                30
    2  BROWN BEAR                30
    

    第二次操作:-

    检查?

    • ALL FOOD PER DAY (KG) 字段中的 True 值将替换为 20 并且

    • ALL FOOD PER DAY (KG) 字段中的 False 值将替换为 ' ' we will change here

    所以重点只是更新False:' ' with False='30'

      ANIMAL        FOOD PER DAY (KG)
    0  LION                      20
    1  BLACK BEAR                30
    2  BROWN BEAR                30
    

    最后总代码是:

    import pandas as pd
    data = {'ANIMAL':['LION', 'BLACK BEAR', 'BROWN BEAR']}
    df = pd.DataFrame(data)
    df['FOOD PER DAY (KG)'] = df['ANIMAL'].str.contains('BEAR') 
    df['FOOD PER DAY (KG)'] = df['FOOD PER DAY (KG)'].map({True: '30', False: ''})
    print(df)  #Observe output so far
    df['FOOD PER DAY (KG)'] = df['ANIMAL'].str.contains('LION') 
    df['FOOD PER DAY (KG)'] = df['FOOD PER DAY (KG)'].map({True: '20', False:'30'})
    print(df)   #Required output 
    

    编码愉快..!!

    【讨论】:

    • 仍在为此苦苦挣扎。我在上面的两个位置删除了, False: ''。现在我有Nan, 30, 30 作为输出,而不是需要的20, 30, 30。还有其他想法吗?
    • @TimothyGeiser 我的坏兄弟...更新了答案,请检查一次。
    猜你喜欢
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多