我目前有一列包含我想要解析的数据,然后将此数据放在其他列上。目前我能得到的最好的方法是使用 apply 方法:def parse_parent_names(row): split = row.person_with_parent_names.split('|')[2:-1] return splitdf['parsed'] = train_data.apply(parse_parent_names, axis=1).head()数据是一个panda df,其列的名称由管道(|)分隔:'person_with_parent_names'|John|Doe|Bobba||Fett|Bobba||Abe|Bea|Cosby|作为最右边的人,最左边的人是“最伟大的父母”。我想将其转换为三列,例如:'grandfather' 'father' 'person'John Doe Bobba Fett BobbaAbe Bea Cosby但是通过申请,我能得到的最好的是'parsed'[John, Doe,Bobba][Fett, Bobba][Abe, Bea, Cosby]我可以使用 apply 3 次,但读取整个数据集 3 次效率不高。
1 回答
30秒到达战场
TA贡献1828条经验 获得超6个赞
您的函数应该通过比较数量|和三元运算符拆分来更改,最后传递给DataFrame构造函数:
def parse_parent_names(row):
m = row.count('|') == 4
split = row.split('|')[1:-1] if m else row.split('|')[:-1]
return split
cols = ['grandfather','father','person']
df1 = pd.DataFrame([parse_parent_names(x) for x in df.person_with_parent_names],
columns=cols)
print (df1)
grandfather father person
0 John Doe Bobba
1 Fett Bobba
2 Abe Bea Cosby
添加回答
举报
0/150
提交
取消