[英]Is there a more efficient way to apply this custom function to the entire dataset?
[英]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.