Pandas:如何拆分字符串并创建新列?

16
假设您有Col1。如何在将Col1中的字符串值拆分直到看到_后创建新列'Col2'?

输入图像描述

3个回答

31

修改以处理没有下划线的字符串:

df['Col2'] = (np.where(df['Col1'].str.contains('_'),
                  df['Col1'].str.split('_').str[1],
                  df['Col1']))

或者按照COLDSPEED在评论中的建议:

df['Col1'].str.split('_').str[-1]
您可以使用带索引的.str访问:
df['Col2'] = df['Col1'].str.split('_').str[1]

例子:

df = pd.DataFrame({'Col1':['Name_John','Name_Jay','Name_Sherry']})
df['Col2'] = df['Col1'].str.split('_').str[1]

输出:

          Col1    Col2
0    Name_John    John
1     Name_Jay     Jay
2  Name_Sherry  Sherry

非常感谢您的回答。这个方法非常有效。有时,Col1 的值是“Cherry”,这意味着在 Cherry 前面没有 Name_。我该如何实现这样的功能,以便如果 Cherry 前面没有 Name_,Col2 仍将拥有 Cherry? - JungleDiff
2
@JunJang df['Col1'].str.split('_').str[-1] 解释:这是一段基于Python语言的代码。它的作用是:将数据框df中名为'Col1'的列按照下划线分隔开,并且保留分割后最后一个元素。 - cs95

13
你可以使用str.split()方法并带上expand=True参数。例如:
ncaa[['Win', 'Lose']] = ncaa['Record'].str.split('-', expand=True)

7

我认为这会起作用。这里的If...else逻辑是为了您的额外要求,如果没有'_'则保留原始内容。

   df['Col2']= df['Col1'].apply(lambda x: x.split('_')[1] if x.find('_')!=-1 else x )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接