在Python Pandas DataFrame中应用正则替换

0 投票
1 回答
2957 浏览
提问于 2025-04-18 15:05

我想从一个 pandas 数据框的某一列中去掉 IP 地址的最后一个八位字节。

现在,我正在尝试运行以下代码:

def rem_last_oct(ip):
    return re.sub(r'\d+$', '', ip)

    # also tried running with plain string manipulation:
    # return ''.join(str(ip).rpartition('.')[:1])

df['cut_ipaddress'] = df['ipaddress'].apply(rem_last_oct)

但是不知道为什么,这个函数在处理字符串时能正常运行,但在用 apply 方法处理数据框时却返回了空字符串,而不是前面三个八位字节。

那么,正确的做法是什么呢?

1 个回答

1

你可以使用 str 属性里的 replace 方法来处理字符串(想了解字符串操作的功能,可以查看 文档):

In [11]: s = pd.Series(["22.231.113.64", "194.66.82.11"])

In [12]: s
Out[12]:
0    22.231.113.64
1     194.66.82.11
dtype: object


In [14]: s.str.replace(r'\d+$', '')
Out[14]:
0    22.231.113.
1     194.66.82.
dtype: object

顺便说一下,你上面提到的方法对我来说是有效的。也就是说,它在一个 Series 上是可以工作的:

In [20]: s.apply(rem_last_oct)
Out[20]:
0    22.231.113.
1     194.66.82.

不过你用 df['ipaddress'] 访问的那一列通常是一个 Series,所以这个方法也应该可以用。你遇到了什么错误信息呢?

撰写回答