如何使用索引列表切片熊猫列?

时间:2021-06-06 12:28:33

标签: python pandas

我尝试从数据框中的字符串中提取前两个单词

df["名称"]

     Name                            
     Anthony Frank Hawk               
     John Rodney Mullen               
     Robert Dean Silva Burnquis
     Geoffrey Joseph Rowley 

要获取第二个“”(空格)的索引,我尝试了这个,但发现返回 NaN 而不是返回字符数,直到第二个空格。

df["temp"] = df["Name"].str.find(" ")+1
df["temp"] = df["Status"].str.find(" ", start=df["Status"], end=None)
df["temp"]
0   NaN
1   NaN
2   NaN
3   NaN

最后一步是对这些名称进行切片,我尝试使用此代码但不起作用。

df["Status"] = df["Status"].str.slice(0,df["temp"])
df["Status"]
0   NaN
1   NaN
2   NaN
3   NaN

expected return

0   Anthony Frank
1   John Rodney
2   Robert Dean
3   Geoffrey Joseph

如果您有更有效的方法来做到这一点,请告诉我!?

2 个答案:

答案 0 :(得分:2)

df['temp'] = df.Name.str.rpartition().get(0)
df

输出

    Name                        temp
0   Anthony Frank Hawk          Anthony Frank
1   John Rodney Mullen          John Rodney
2   Robert Dean Silva Burnquis  Robert Dean Silva
3   Geoffrey Joseph Rowley      Geoffrey Joseph

编辑

如果输出中只需要前两个元素。

df['temp'] = df.Name.str.split().str[:2].str.join(' ')
df

df['temp'] = df.Name.str.split().apply(lambda x:' '.join(x[:2]))
df

df['temp'] = df.Name.str.split().apply(lambda x:' '.join([x[0], x[1]]))
df

输出

    Name                        temp
0   Anthony Frank Hawk          Anthony Frank
1   John Rodney Mullen          John Rodney
2   Robert Dean Silva Burnquis  Robert Dean
3   Geoffrey Joseph Rowley      Geoffrey Joseph

答案 1 :(得分:0)

你可以用str.index(substring)代替str.find,它返回在字符串中找到的子串(如" ",空格)的最小索引。然后,您可以按该索引拆分字符串,并将上述内容重新应用于结果列表中的第二个字符串。