【发布时间】:2021-04-14 03:48:22
【问题描述】:
我正在尝试对数据框中的特定列应用正则表达式。
此列称为数据类型“非空对象”的“权重”。 此列中的样本值如下所示 - '250 lbs./ 113.4 kg.'
我的目标是在整个列上应用正则表达式,以便仅提取以磅为单位的重量(在上面的示例中,这将是“250”)。
为此,我使用 Series.Apply 函数对列的每一行应用正则表达式:
import re
k = Df['weight'].apply(re.findall,args=('^([0-9]+)\s+',))
print(k.head())
但由于某种原因,'k' 原来是一个包含 空列表的 Pandas 系列。
我尝试将re.findall 逐一应用于“权重”列中的各个元素,然后它按预期返回输出:
k = re.findall('^([0-9]+)\s+',Df['weight'].iloc[0])
print(k)
如果我们对上述示例值进行尝试,这将返回 ['250'] 的输出。
为什么re.findall 在单独应用于系列元素时可以正常工作,但不能与 Series.Apply 函数一起使用?我不明白为什么我会得到一个充满空列表的系列作为后者的输出。
【问题讨论】:
-
查看
pandas.Series.str.extractpandas.pydata.org/docs/reference/api/…。它提供了一种从正则表达式捕获组创建新列的好方法。 -
哇,谢谢,这符合我的目的!它正在返回我需要的输出。不过,我仍然想知道为什么我没有使用 re.findall 获得代码的输出...
标签: python dataframe python-re