regex 需要从列中提取数据,如果某个字符存在,则提取该字符之前的子串

5f0d552i  于 2022-11-18  发布在  其他
关注(0)|答案(2)|浏览(143)

我有一个列,我试图清理,数据是这样的:

无论模式是x-y年,我只想提取'x'值并将其保留在字符串中。对于任何其他值,我想保持原样。
使用str.extract('(.{,2}(-))')将为所有其他行返回一个NaN值。

iovurdzv

iovurdzv1#

解决方案首先编译正则表达式,然后将编译后的正则表达式用于每一行。lambda还依赖于海象运算符:=。假设第二列命名为col2

import re

pattern = re.compile("([\d]+)-[\d]+ year")
df["col2"] = df["col2"].map(lambda x: m[1] if (m:=pattern.match(x)) else x)
nr9pn0ug

nr9pn0ug2#

我相信你想要的是series.str.replace()
这是否为您提供了所需的输出?

df = pd.DataFrame.from_records([[1778, '3-5 year'], [961, np.nan], [2141, 'h 3+ year']], columns=['a','b'])

repl = lambda m: m.group(1)
df.b = df.b.str.replace(r'(\d+)-\d+\syear', repl, regex=True)
df

其采用原始的df

a          b
0  1778   3-5 year
1   961        NaN
2  2141  h 3+ year

并给出输出:

a          b
0  1778          3
1   961        NaN
2  2141  h 3+ year

相关问题