我正在使用pandas读取csv列,其中每一行都具有以下格式:
IP: XXX:XX:XX:XXX
为了摆脱IP:
前缀,我正在编辑事实后的列:
logs['ip'] = logs['ip'].str[4:]
有没有办法在read_csv
内执行此操作,可能使用正则表达式,以避免后期计算?
更新 | 考虑这种情况,其中有多个列具有这些前缀 - 是否有更好的方法?
logs['mac'] = logs['mac'].str[5:]
logs['id'] = logs['id'].str[4:]
logs['lan'] = logs['lan'].str[5:]
logs['ip'] = logs['ip'].str[4:]
答案 0 :(得分:1)
您可以将csv列转换为字符串,在字符串上使用.split(“IP:”)[1],该字符串将包含除“IP:”之外的所有内容。我不确定这是否是最好的方法,但这是我想到的。
str.split("IP":\s")
答案 1 :(得分:1)
converters
的{{1}}选项可能会提供有用的方法。让我们说文件看起来像这样:
read_csv
然后您可以指定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:
作为其自己的专栏,但您应该能够这很容易适应这一点。