我想在包含3个不同列的数据框架中创建一个新列。我希望删除非字母后的姓氏的前5个字母,如果它只是姓氏的那么长,第一个名字的前2个字母和附加到末尾的代码。
下面的代码不起作用,但那就是我所处的地方,并且它不接近工作
df['namecode'] = df.Last.str.replace('[^a-zA-Z]', '')[:5]+df.First.str.replace('[^a-zA-Z]', '')[:2]+str(jr['code'])
Name lastname code namecode
jeff White 0989 Whiteje0989
Zach Bunt 0798 Buntza0798
ken Black 5764 Blackke5764
答案 0 :(得分:0)
这是一种方法。
使用pandas str.slice
而不是尝试进行字符串索引。
例如:
将pandas导入为pd
df = pd.DataFrame(
{
'First': ['jeff', 'zach', 'ken'],
'Last': ['White^', 'Bun/t', 'Bl?ack'],
'code': ['0989', '0798', '5764']
}
)
print(df['Last'].str.replace('[^a-zA-Z]', '').str.slice(0,5)
+ df['First'].str.slice(0,2) + df['code'])
#0 Whiteje0989
#1 Buntza0798
#2 Blackke5764
#dtype: object