提取Pandas列中的第一个字符串序列

3bygqnnd  于 2022-11-27  发布在  其他
关注(0)|答案(5)|浏览(329)

我在DF中有一列,如下所示

| Column A       |
| ab, bce, bc    |
| bc, abcd, ab   | 
| ab, cd, abc    |

我想创建一个只接受第一个序列的新列,如下所示

| Column A       | Column B |
| ab, bce, bc    | ab       |
| bc, abcd, ab   | bc       |
| ab, cd, abc    | ab       |

我试着用这个代码,但它只给了我第一个序列的第一个字母,而不是整个缩写

df.loc[:, 'ColumnB'] = df.ColumnA.map(lambda x: x[0])
mbzjlibv

mbzjlibv1#

我猜columnA中的项是字符串,例如'ab,bce,bc',所以只需使用split ;).

df.loc[:, 'ColumnB'] = df.ColumnA.map(lambda x: x.split(',')[0])
yzuktlbb

yzuktlbb2#

你也可以尝试向量化str方法split,并在列表上使用整数索引来获取第一个元素:

df['Column B'] = df['Column A'].str.split(',').str[0]

应给予

Column A       Column B 
ab, bce, bc    ab       
bc, abcd, ab   bc       
ab, cd, abc    ab
ryhaxcpt

ryhaxcpt3#

已经很接近了,只需要将字符串转换为列表,并在map前加上pandas.Series.split

df["Column B"]= df["Column A"].str.split(",").map(lambda x: x[0])

您也可以使用pandas.Series.get

df["Column B"]= df["Column A"].str.split(",").str.get(0)

另一个选项是列表理解:

df["Column B"]= [el[0] for el in df["Column A"].str.split(",")]
#输出:
print(df)

       Column A Column B
0   ab, bce, bc       ab
1  bc, abcd, ab       bc
2   ab, cd, abc       ab
dphi5xsq

dphi5xsq4#

因此,该行被视为string,您将获得字符串"ab,bce,bc"的第一个索引。
你需要把它转换成一个list,然后取第一个元素,现在是"ab"。

df.loc[:, 'ColumnB'] = df.ColumnA.map(lambda x: x.split(",")[0])

这将根据需要创建"ColumnB"。
希望能有所帮助!

bvk5enib

bvk5enib5#

如果你想要第一个块,不要使用split,而要使用extract开头的非,字符,这样会更有效率:

df['Column B'] = df['Column A'].str.extract('([^,]+)')

输出量:

Column A Column B
0   ab, bce, bc       ab
1  bc, abcd, ab       bc
2   ab, cd, abc       ab

相关问题