我有一个数据集,看起来像这样包含MAC地址:
dataset = {'Col1': ['10:50:1C:56:FF:C1', np.nan, '56:20:30:70:10:00'], 'Col2': [np.nan,
'50:60:40:10:00:00', np.nan]}
dataframe = pd.DataFrame(data = dataset)
# Showing dataframe
Col1 Col2
0 10:50:1C:56:FF:C1 NaN
1 NaN 50:60:40:10:00:00
2 56:20:30:70:10:00 NaN
我希望将这些地址分割为前七个字符,因此 Dataframe 应该如下所示:
# Showing Sliced dataframe
Col1 Col2
0 10:50:1C NaN
1 NaN 50:60:40
2 56:20:30 NaN
现在我已经写了下面的自定义函数,它成功地完成了这项工作,但它使用递归,我正在寻找一个方法,可以削减时间和使用更少的内存。
def sliceit(x):
x = str(x)
return x[:8]
def slice_macs(rowx):
for i, item in enumerate(rowx):
rowx[i] = sliceit(item)
return rowx
我也收到了来自这个社区的精彩回应,我问了一个类似的问题,关于切片一个不同形式的字符串,然而,我试图研究正则表达式,并作出修改,使之能够适用于这些类型的字符串,但我没有运气。
IPs = splits.replace(r"(\d+\.\d+\.\d+)\.\d+", r"\1", regex=True)
所以我的问题是,有没有一种方法可以在不使用这么多内存的情况下,以一种更像Python的、更快的方式完成上述任务?
1条答案
按热度按时间xytpbqjk1#
所以如果我理解正确的话,你可以把pd.Series.str作为一个矢量化的方法来使用字符串切片。