【问题标题】:Extract first sequence of strings in pandas column提取 pandas 列中的第一个字符串序列
【发布时间】:2022-11-24 20:24:19
【问题描述】:
我在 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])
【问题讨论】:
标签:
python
pandas
columnsorting
【解决方案1】:
我猜 columnA 中的项目是字符串,例如'ab, bce, bc',所以只需使用 split ;)。
df.loc[:, 'ColumnB'] = df.ColumnA.map(lambda x: x.split(',')[0])
【解决方案2】:
您还可以尝试向量化字符串方法 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
【解决方案3】:
你很接近,你只需要在地图之前将字符串转换为带有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