如果您有两列(A ='Name',B ='Name_Age'),那么是否有一种快速方法可以从'Name_Age'中删除'Name',因此您可以快速获得'Age',就像反向级联??
我曾经考虑过“字符串拆分”,但是在某些情况下(当没有字符串拆分因子时),我确实需要一种从另一列中删除一列字符串的方法。
@property
答案 0 :(得分:1)
您可以尝试使用pandas apply
函数,该函数可让您定义要传递给数据帧每一行的函数:
def age_from_name_age(name, name_age):
return name_age.replace(name, '').strip()
df['Age'] = df.apply(lambda x: age_from_name_age(x['Name'], x['Name_Age']),
axis='columns')
age_from_name_age
接受两个字符串(一个名称和一个name_age),并仅返回年龄。然后,在apply语句中,我定义了一个匿名lambda函数,该函数只接受一行并将正确的字段传递给age_from_name_age
。
答案 1 :(得分:1)
使用字符串切片:
df['Age'] = df.apply(lambda row: row['Name_Age'][len(row['Name']):], axis=1).astype(int)
答案 2 :(得分:0)
您可以使用str.split()
使用空格分隔符将值与列名分开,然后使用新名称重命名该列。
str.split()
>>> df['Name_Age'].str.split(" ", expand=True).rename(columns={0:'Name', 1:'Age'})
Name Age
0 Mark 14
1 Matt 29
2 Michael 18
OR
>>> df = df['Name_Age'].str.split(" ", expand=True).rename(columns={0:'Name', 1:'Age'})
>>> df
Name Age
0 Mark 14
1 Matt 29
2 Michael 18
或,通过将拆分后的列表转换为新的数据帧:
>>> pd.DataFrame(df.Name_Age.str.split().tolist(), columns="Name Age".split())
Name Age
0 Mark 14
1 Matt 29
2 Michael 18
str.partition
>>> df['Name_Age'].str.partition(" ", True).rename(columns={0:'Name', 2:'Age'}).drop(1, axis=1)
Name Age
0 Mark 14
1 Matt 29
2 Michael 18
df.assign
与lambda
一起使用按如下所示将split()
与默认分隔符一起使用,并用新列Age
赋值。
>>> df.assign(Age = df.Name_Age.apply(lambda x: x.split()[1]))
Name Name_Age Age
0 Mark Mark 14 14
1 Matt Matt 29 29
2 Michael Michael 18 18
OR
>>> df.Name_Age.apply(lambda x: pd.Series(str(x).split())).rename({0:"Name",1:"Age"}, axis=1)
Name Age
0 Mark 14
1 Matt 29
2 Michael 18