格式化字符串以遍历数据帧

时间:2019-05-27 22:07:46

标签: pandas loops text format special-characters

背景

我有以下代码从列表中制作数据框:

l = ['the cat meows',
     'the dog barks',
     'the bird chirps']
df = pd.DataFrame(l, columns=['Text'])

输出:

          Text
0   the cat meows
1   the dog barks
2   the bird chirps

所需的输出:

          Text     Animal   
0   the cat meows   cat
1   the dog barks   dog
2   the bird chirps bird

方法:

我尝试使用以下代码获取所需的输出

#create list of animal names
animal_list = ['cat', 'dog', 'bird']

#extract names from 'Text' column using the names in 'animal_list' 
#and create a new column containing extracted 'Text' names
df['Sound'] = df['Animal'].str.extract(r"(%s)"% animal_list)

问题:

但是,这样做时我得到以下信息:

            Text    Animal
0   the cat meows   t
1   the dog barks   t
2   the bird chirps t

问题

如何实现所需的输出?

1 个答案:

答案 0 :(得分:2)

animal_liststr.extract一起使用

我们可以在此处使用Series.str.extract,并将其以animal_list分隔的|传递给它,它是regex中的or运算符:

df['Animal'] = df['Text'].str.extract(f"({'|'.join(animal_list)})")

或者如果您的Python <3.5,则不能使用 f-string

我们可以在评论中使用@Mike的答案

df['Animal'] = df['Animal'].str.extract(r"({})".format("|".join(animal_list)))

输出

              Text Animal
0    the cat meows    cat
1    the dog barks    dog
2  the bird chirps   bird

使用str.split获取中间词

df['Animal'] = df['Text'].str.split().str[1]

输出

              Text Animal
0    the cat meows    cat
1    the dog barks    dog
2  the bird chirps   bird