背景:
我有以下代码从列表中制作数据框:
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
问题
如何实现所需的输出?
答案 0 :(得分:2)
animal_list
与str.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