Pandas 从另一列的字符串切片创建新列

86 投票
4 回答
164176 浏览
提问于 2025-04-21 02:46

我想在Pandas中创建一个新列,这个新列是通过对数据框中另一个列的字符串进行切片得到的。

比如说。

Sample  Value  New_sample
AAB     23     A
BAB     25     B

这里的 New_sample 是一个新列,它是通过对 Sample 列进行简单的 [:1] 切片得到的。

我尝试了很多方法,但都没有成功——我觉得我可能漏掉了什么简单的东西。

有什么更有效的方法来做到这一点吗?

4 个回答

0

这里提供一个解决方案,适用于当你想从 pandas 数据框的索引中提取第二个元素(这个索引是一个元组),并把它放到一个新的列里。虽然不确定有没有更简便的方法,但这个方法是有效的:

df["newcol"]=df.index
df["newcol"]=df["newcol"].apply(lambda x: x[1])
18

你还可以使用 slice() 来切割 Series 中的字符串,方法如下:

df['New_sample'] = df['Sample'].str.slice(0,1)

来自 pandas 文档

Series.str.slice(start=None, stop=None, step=None)

从 Series/Index 中的每个元素提取子字符串

如果你想切割索引(前提是索引的类型是字符串),可以尝试:

df.index = df.index.str.slice(0,1)
22

这里提供了一个解决方案,适用于一个常见的情况:当数据表中的每一行的切片宽度不一样时

#--Here i am extracting the ID part from the Email (i.e. the part before @)

#--First finding the position of @ in Email
d['pos'] = d['Email'].str.find('@')

#--Using position to slice Email using a lambda function
d['new_var'] = d.apply(lambda x: x['Email'][0:x['pos']],axis=1)

#--Imagine x['Email'] as a string on which, slicing is applied

希望这对你有帮助!

144

你可以使用 str 方法并进行切片,这种方式会比其他方法快很多,因为它是向量化的(感谢 @unutbu):

df['New_Sample'] = df.Sample.str[:1]

你也可以在数据框(df)上调用一个 lambda 函数,但在处理较大的数据框时,这种方法会比较慢:

In [187]:

df['New_Sample'] = df.Sample.apply(lambda x: x[:1])
df
Out[187]:
  Sample  Value New_Sample
0    AAB     23          A
1    BAB     25          B

撰写回答