如何在熊猫的列中间添加字符串

时间:2018-09-24 10:24:13

标签: python pandas

我正在寻找不涉及.apply或lambda函数的解决方案,该函数循环遍历列表并在所需索引处投放字符串。我有一列这样的列,其中包含许多条目:

df = pd.DataFrame(["1:77631829:-:1:77641672:-"], columns=["position"])

    position
0   1:77631829:-:1:77641672:-

我想要:

    position
0   chr1:77631829:-:chr1:77641672:-

因此在第三个冒号:的开头和之后插入“ chr”

我原本以为会这样做,但是insert尚未按顺序实现:

"chr" + df["position"].str.split(":").insert(3, "chr").str.join(":")

这样做,但效率低下:

"chr" + df["position"].str.split(":").str[:3].str.join(":") + "chr" + df["position"].str.split(":").str[3:].str.join(":")

1 个答案:

答案 0 :(得分:1)

我认为您可以使用3的{​​{1}}拆分值,然后提取列表的开头和结尾-加入head,在结尾添加:,在ch前面加上最后添加到列表ch

L

缺乏评论的解决方案:

df = pd.DataFrame(["1:77631829:-:1:77641672:-","1:77631829:-:1:77641672:-"], 
                  columns=["position"])
print (df)
                    position
0  1:77631829:-:1:77641672:-
1  1:77631829:-:1:77641672:-

L = []
for x in df["position"]:
    *i, j = x.split(':', 3)
    L.append(("chr" + ':'.join(i) + "chr" + j))

df['new'] = L
print (df)
                    position                             new
0  1:77631829:-:1:77641672:-  chr1:77631829:-chr1:77641672:-
1  1:77631829:-:1:77641672:-  chr1:77631829:-chr1:77641672:-

具有列表理解和f字符串的快捷方式:

'chr' + df['position'].str.replace('-:', '-:chr')

性能

df['new'] = [f"ch{x.replace('-:', '-:chr')}" for x in df['position']]