我有一列名称(“名称”),其中也可能包含 2 个版本,也称为(又名),例如“约翰·斯诺别名伊耿·坦格利安”和“提利昂·兰尼斯特@小鬼”。 根据分隔符,它可能是正常的又名(如果 sep“别名”),或 lqaka(低质量又名如果 sep“@”)。我想将它们添加到两个新的单独列(“aka”和“lqaka”)。
所以我的功能是:
def get_akas(str):
delims = {"alias":"aka", "@":"lqaka"}
akas = {}
for key in delims:
if key in str:
akas[delims[key]] = str.split(key, 1)[1]
return akas
然后我用了apply并聚在一起:
df["aka"] = df["name"].apply(get_akas).get("aka","")
df["lqaka"] = df["name"].apply(get_akas).get("lqaka","")
这不起作用。我很确定我使用 apply 和 get 的方式是不正确的。冬天到来之前有人可以帮忙吗?
我想你就快到了:
import pandas as pd
df = pd.DataFrame({
"name": ["John Snow alias Aegon Targaryen", "Tyrion Lannister @ The Imp"]
})
def get_akas(s):
delims = {"alias": "aka", "@": "lqaka"}
akas = {'aka': None, 'lqaka': None}
for key, value in delims.items():
if key in s:
akas[value] = s.split(key, 1)[1].strip()
return akas['aka'], akas['lqaka']
df[['aka', 'lqaka']] = df['name'].apply(lambda x: get_akas(x)).apply(pd.Series)
print(df)
这会给你
name aka lqaka
0 John Snow alias Aegon Targaryen Aegon Targaryen None
1 Tyrion Lannister @ The Imp None The Imp