将 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
我有一个包含 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