如何在具有多个值的列中选择字符串的一部分

问题描述

我有一个.tsv数据框,其中的特定列有多个值,并用逗号分隔。看起来像这样:

     Col1         Col2         Col3

1    star1  HIP1,KOI1,Gaia1  3.4
2    star2  HIP2,KOI2,Gaia2  4.3
3    star3  HIP3,KOI3,Gaia3  7.2

我的目标是仅从第2列中获取一部分字符串值,这样我只有一个用逗号分隔的选项。在这种情况下,将是KOI。看起来像这样:

     Col1   Col2  Col3

1    star1  KOI1  3.4
2    star2  KOI2  4.3
3    star3  KOI3  7.2

考虑到KOI(x)之后的数字不遵循顺序顺序(如示例中所示),有没有办法做到这一点? 我尝试使用str.lsplit()和split函数,但是代码返回消息:'StringMethods' object has no attribute 'lsplit'。这是我尝试过的:

for i in df['Col2']:
    df['Col2'][i] = df['Col2'].str.lsptrip(',K').str[0]

然后,当我将字符串中的孤立的“ K”字母添加到字符串中时,我会尝试添加它,但是再也没有找到。

解决方法

您也可以使用pd.Series.str.extract

df['Col2']=df['Col2'].str.extract('.*,(K.*),.*')

与此相同,pd.Series.str.split

df['Col2']=df['Col2'].str.split(',').str[1]

输出:

df
    Col1  Col2  Col3
1  star1  KOI1   3.4
2  star2  KOI2   4.3
3  star3  KOI3   7.2