在Python Pandas DataFrame中应用正则替换
我想从一个 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,所以这个方法也应该可以用。你遇到了什么错误信息呢?