我目前有一列要分析的数据,然后将其放在其他列上。目前,我能得到的最好的结果就是使用apply方法:
def parse_parent_names(row):
split = row.person_with_parent_names.split('|')[2:-1]
return split
df['parsed'] = train_data.apply(parse_parent_names, axis=1).head()
数据是熊猫df,其列的名称用竖线(|)分隔:
'person_with_parent_names'
|John|Doe|Bobba|
|Fett|Bobba|
|Abe|Bea|Cosby|
成为最右边的人,最左边的“祖父母”。我想将其转换为三列,例如:
'grandfather' 'father' 'person'
John Doe Bobba
Fett Bobba
Abe Bea Cosby
但是通过申请,我能得到的最好的是
'parsed'
[John, Doe,Bobba]
[Fett, Bobba]
[Abe, Bea, Cosby]
我可以使用apply 3次,但是读取整个数据集3次效率不高。
答案 0 :(得分:1)
您应该通过比较数量|
来更改函数,并通过三元运算符进行拆分,最后传递给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