繁体   English   中英

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

[英]Is there a more efficient way to apply the custom function text slicer to the entire dataset?

我有一个看起来类似于包含 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

现在我已经编写了下面的自定义 function,它成功地完成了工作,但是它使用递归,我正在寻找一种可以减少时间和使用更少 memory 的方法。

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)

所以我的问题是,有没有一种方法可以在不使用那么多 memory 的情况下以更 pythonic 和更快的方式完成上述任务?

因此,如果我理解正确,您可以使用pd.Series.str作为矢量化方法在系列上使用字符串切片。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM