将 pandas dataframe/series 应用于 netaddr EUI 构造函数

Apply pandas dataframe/series to netaddr EUI constructor

我有一个包含 Mac 个地址的数据框,需要转换。我首先执行以下操作以清除任何 nan

df = df[pd.notnull(df["MacAddr"])]["MacAddr"] # avoid null values being passed to netaddr

...然后我想像这样解析到 EUI 构造函数中:

from netaddr import EUI, mac_bare

mac = EUI(df)
mac.dialect = mac_bare

但这不起作用,因为 EUI 需要一个字符串,而不是 pandas 系列。有没有办法规避这个?

我得到这个错误:

Name: MacAddr, Length: 26953, dtype: object is not str() or unicode()!

根据系列创建一个列表,然后将元素连接成一个字符串。

 ','.join(df[pd.notnull(df["MacAddr"])]["MacAddr"].to_list())

由于 EUI 构造函数目前无法解析 dataframes/series,因此我为 df.apply() 创建了一个函数,如下所示:

def main(self):
    def _eui_mac_bare_func(x):
        mac = EUI(x)
        mac.dialect = mac_bare
        return mac

series = df[pd.notnull(df["MacAddr"])]["MacAddr"] # avoid null values being passed to netaddr
new_series = series.apply(_eui_mac_bare_func) # apply function to every row
df = df.join(new_series.rename("Norm_MacAddr")) # join df and series on corresponding indices