从每一行中删除字符串标签
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_csv
的 converters
选项可能提供了一种有用的方法。假设文件如下所示:
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:
因为它是自己的专栏,但你应该能够很容易地适应这个来处理那个。
我正在使用 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_csv
的 converters
选项可能提供了一种有用的方法。假设文件如下所示:
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:
因为它是自己的专栏,但你应该能够很容易地适应这个来处理那个。