我有一个pandas数据框,其中一列只包含字符串。
df= pd.DataFrame(
{
"A": [2,4,7,17,39],
"B": ["apple","apple","broccoli","rose","apple"]
}
)
我想查看这个专栏" B"并查找字符串包含单词的某个部分的所有时间。然后我创建了一个新专栏" C"它包含一系列字符串,表示" fruit"每当" app"在排,"花"无论什么时候" ros"无论什么时候出现和蔬菜" brocc"出现了。
最终的数据框如下所示:
df= pd.DataFrame(
{
"A": [2,4,7,17,39],
"B": ["apple","apple","broccoli","rose","apple"],
"C": ["fruit","fruit", "vegetable", "flower", "fruit"]
}
)
答案 0 :(得分:3)
创建字典
d = {'apple': 'fruit', 'broccoli': 'vegetable', 'rose': 'flower'}
并在map
或replace
中使用它(地图更快):
df['B'].map(d)
Out:
0 fruit
1 fruit
2 vegetable
3 flower
4 fruit
Name: B, dtype: object
df['B'].replace(d)
Out:
0 fruit
1 fruit
2 vegetable
3 flower
4 fruit
Name: B, dtype: object
答案 1 :(得分:2)
您可以使用字典作为转换器,将get
方法作为apply
的输入:
converter = {'apple': 'fruit',
'broccoli': 'veg',
'rose': 'flower'}
df['C'] = df['B'].apply(converter.get)
print(df)
A B C
0 2 apple fruit
1 4 apple fruit
2 7 broccoli veg
3 17 rose flower
4 39 apple fruit
如果部分匹配,您需要稍微更改一下:
converter = {'app': 'fruit',
'brocc': 'vegetable',
'ros': 'flower'}
df['C'] = df['B'].apply(lambda original: next(val for key, val in converter.items() if key in original))
print(df)
A B C
0 2 apple fruit
1 4 apple fruit
2 7 broccoli vegetable
3 17 rose flower
4 39 apple fruit
next(val for key, val in converter.items() if key in original)
将为字典中的第一个找到的键提供“"行"”中的值。