如何从Pandas DataFrame的IP列提取非0.0.0.0的有效IP?
解决Pandas DataFrame中过滤IP列移除0.0.0.0的问题
你可以通过**apply结合列表推导式**来高效处理这个需求,直接在原列上完成拆分、过滤和合并的操作,完美得到你想要的结果。
完整代码实现
import pandas as pd df = pd.DataFrame ({ 'IP':['10.140.34.210;0.0.0.0','0.0.0.0;0.0.0.0;10.0.1.87;0.0.0.0;0.0.0.0','0.0.0.0;172.31.48.174', '10.140.67.244;0.0.0.0', '1.1.1.1','3.3.3.3'], }) # 核心处理逻辑 df['IP'] = df['IP'].apply(lambda x: ';'.join([ip for ip in x.split(';') if ip != '0.0.0.0'])) print(df)
输出结果
IP 0 10.140.34.210 1 10.0.1.87 2 172.31.48.174 3 10.140.67.244 4 1.1.1.1 5 3.3.3.3
逻辑拆解
- 拆分字符串:用
x.split(';')把每个单元格的分号分隔IP拆成列表; - 过滤无效IP:通过列表推导式
[ip for ip in ... if ip != '0.0.0.0']剔除所有0.0.0.0; - 合并有效IP:用
';'.join()把过滤后的有效IP重新拼接成字符串,放回原列。
为什么你的split(expand=True)没达到预期?
这种方式会把拆分后的IP拆成多列,后续还要处理空值、筛选有效IP再合并,步骤更繁琐。而上面的方法直接在原列上完成所有操作,代码更简洁高效。
内容的提问来源于stack exchange,提问作者zimskiz
相关产品推荐
相关产品推荐

