繁体   English   中英

从 Pandas/Python 中提取字符串

[英]Extract string from Pandas/Python

我正在尝试从 dataframe 中提取字符串。

原始数据(数据框)
第 1 列:
CA_1,CA_2,CA_3,BA_1,BA_2,BA_3,CA_4,BA_12,CA_6

预计 Output
第 1 列:
CA_1,CA_2,CA_3,CA_4,CA_6

如何生产预期的 output? 我尝试了 pandas 提取、提取、包含但我无法生成预期的 output。

看起来您要删除所有不以CA_开头的项目?

我会将str.replace与正则表达式一起使用:

df['Column1'].str.replace(r'(?:(?!CA_)\b\w+,?)', '', regex=True)

替代split / explode / groupby.agg

(df['Column1'].str.split(',').explode()
 .loc[lambda s: s.str.startswith('CA_')]
 .groupby(level=0).agg(','.join)
)

output:

0    CA_1,CA_2,CA_3,CA_4,CA_6
Name: Column1, dtype: object

我们可以在这里使用str.replace

df["Column1"] = df["Column1"].str.replace(r'\b(?!CA_)[A-Z]+_\d+\b,?', '', regex=True)

这是一个正则表达式演示,显示替换逻辑正在运行。

考虑到 OP 的 dataframe 如下所示

df = pd.DataFrame({'Column1': ['CA_1', 'CA_2', 'CA_3', 'BA_1', 'BA_2', 'BA_3', 'CA_4', 'BA_12', 'CA_6']})

[Out]:

  Column1
0    CA_1
1    CA_2
2    CA_3
3    BA_1
4    BA_2
5    BA_3
6    CA_4
7   BA_12

并假设 OP 希望 dataframe 仅包含包含字符串CA的单元格,可以使用str.contains()如下

df_new = df[df['Column1'].str.contains('CA')]

[Out]:
  Column1
0    CA_1
1    CA_2
2    CA_3
6    CA_4
8    CA_6

或者,可以使用str.startswith()

df_new = df[df['Column1'].str.startswith('CA')]

[Out]:
  Column1
0    CA_1
1    CA_2
2    CA_3
6    CA_4
8    CA_6

尝试这样的事情:

data = {
    'col1': ['CA_1','CA_2','CA_3','BA_1','BA_2','BA_3','CA_4','BA_12','CA_6']
}

df = pd.DataFrame(data)
res = [dt for dt in data['col1'] if dt.startswith('CA_')]
print(res)

结果:

['CA_1', 'CA_2', 'CA_3', 'CA_4', 'CA_6']

暂无
暂无

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

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