从每一行中删除字符串标签

Remove String Labels from every Row

我正在使用 pandas 读取 csv 列,其中每一行都具有以下格式:

IP: XXX:XX:XX:XXX

为了去掉 IP: 前缀,我在事后编辑该列:

logs['ip'] = logs['ip'].str[4:]

有没有办法在 read_csv 内执行此操作,也许使用正则表达式,以避免 post 计算?

更新 | 考虑这种情况,其中有多个列具有这些前缀 - 有更好的方法吗?

logs['mac'] = logs['mac'].str[5:] logs['id'] = logs['id'].str[4:] logs['lan'] = logs['lan'].str[5:] logs['ip'] = logs['ip'].str[4:]

您可以将 csv 列转换为字符串,在字符串上使用 .split("IP: ")[1],它将包含除 "IP: " 以外的所有内容。我不确定这是否是最好的方法,但这是我想到的。

str.split("IP":\s")

read_csvconverters 选项可能提供了一种有用的方法。假设文件如下所示:

id       address
 1  IP:123.1.1.1
 2  IP:456.1.1.1
 3  IP:789.1.1.1

然后您可以指定 'IP:' 应该转换为 ''(空白),如下所示:

dct = { 'address': lambda x: x.replace('IP:','') }

df = pd.read_csv( 'foo.txt', delimiter=' *', converters=dct )

   id    address
0   1  123.1.1.1
1   2  456.1.1.1
2   3  789.1.1.1

我忽略了一个轻微的并发症,如果在 IP: 之后有一个 space 那么你可能正在阅读 IP: 因为它是自己的专栏,但你应该能够很容易地适应这个来处理那个。