我有一个列,我试图清理,数据是这样的:
无论模式是x-y年,我只想提取'x'值并将其保留在字符串中。对于任何其他值,我想保持原样。使用str.extract('(.{,2}(-))')将为所有其他行返回一个NaN值。
iovurdzv1#
解决方案首先编译正则表达式,然后将编译后的正则表达式用于每一行。lambda还依赖于海象运算符:=。假设第二列命名为col2。
:=
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)
nr9pn0ug2#
我相信你想要的是series.str.replace()。这是否为您提供了所需的输出?
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:
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
2条答案
按热度按时间iovurdzv1#
解决方案首先编译正则表达式,然后将编译后的正则表达式用于每一行。lambda还依赖于海象运算符
:=
。假设第二列命名为col2
。nr9pn0ug2#
我相信你想要的是
series.str.replace()
。这是否为您提供了所需的输出?
其采用原始的
df
:并给出输出: