繁体   English   中英

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

[英]Extract first sequence of strings in pandas column

我在 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])

我猜 columnA 中的项目是字符串,例如“ab、bce、bc”,所以只需使用 split;)。

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

您也可以尝试使用矢量化 str 方法 split 并在列表中使用 integer 索引来获取第一个元素:

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       

你很接近,你只需要在 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(",")]

#Output:

print(df)

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

因此,该行被视为字符串,您将获得字符串“ab、bce、bc”的第一个索引。

您需要将其转换为列表,然后获取第一个现在为“ab”的元素。

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

这会根据需要创建“ColumnB”。

希望能帮助到你!

如果您想要第一个块,请不要split 而是extract初始的非,字符。 这将更有效率:

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

Output:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM