pandas 是否有更有效的方法将自定义函数文本切片器应用于整个数据集?

brjng4g3  于 2022-12-16  发布在  其他
关注(0)|答案(1)|浏览(142)

我有一个数据集,看起来像这样包含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的、更快的方式完成上述任务?

xytpbqjk

xytpbqjk1#

所以如果我理解正确的话,你可以把pd.Series.str作为一个矢量化的方法来使用字符串切片。

dataframe.Col1 = dataframe.Col1.str[:8]
dataframe.Col2 = dataframe.Col2.str[:8]

相关问题