pandas DataFrame 条件字符串分割
我在我的数据表中有一列流感病毒的名称。这里有一些名称格式的例子:
- (A/Egypt/84/2001(H1N2))
- A/Brazil/1759/2004(H3N2)
- A/Argentina/126/2004
我只想从这些病毒名称中提取出格式为 A/国家/编号/年份 的部分,比如 A/Brazil/1759/2004。我尝试过这样做:
df['Strain Name'] = df['Original Name'].str.split("(")
但是,如果我尝试用 .str[0]
来访问,就会漏掉第一个案例。如果我用 .str[1]
,就会漏掉第二和第三个案例。
有没有一种方法可以同时处理这三种情况?或者有没有办法在字符串分割时应用条件,而不需要逐行遍历整个数据表?
1 个回答
1
根据EdChum的建议,我在这里发布我的回答。
解决这个问题所需的最简单的数据框:
Index Strain Name Year
0 (A/Egypt/84/2001(H1N2)) 2001
1 A/Brazil/1759/2004(H3N2) 2004
2 A/Argentina/126/2004 2004
下面的代码可以提取出菌株名称,只保留名称,不包括括号里的内容:
df['Strain Name'] = df['Strain Name'].str.split('(').apply(lambda x: max(x, key=len))
这段代码适用于这里提到的特定情况,诀窍在于,分开开括号(“(
”)后,菌株的“名称”是最长的字符串。