首页 > 解决方案 > 通过随机化 Pandas 数据帧中每一行中的最后一个字节来生成 IP 地址

问题描述

我正在输入一个 IP 地址。我想随机化 IP 地址范围 0 到 254 之间的最后一个字节,并在 pandas 数据帧的每一行中打印 IP 地址。
例如:
给定的输入 IP 地址是:'10.10.10.0'
预期的输出:
>> 10.10.10.5
>> 10.10.10.173
>> 10.10.10.34
等等......

这是我使用的示例代码:

import pandas as pd
import numpy as np
import random
from random import randint

df_header="IPV4_SRC_ADDR"
def func(IPV4_SRC_ADDR= "253.253.253.253", filename=None):
    df = pd.DataFrame(0, index=np.arange(1000), columns=df_header) #generating a dataframe with all initial values as 0

    if(IPV4_SRC_ADDR!="253.253.253.253"):
        IPV4_SRC_ADDR = IPV4_SRC_ADDR.rsplit('.', 1)[0]
        df['IPV4_SRC_ADDR']=IPV4_SRC_ADDR + '.' + str(np.random.randint(0, 254, df.shape[0]))
    else:
        df['IPV4_SRC_ADDR']=IPV4_SRC_ADDR

    if(filename is not None):
        df.to_csv(filename, mode='a', header=False)
    else:
        df.to_csv('output.csv')

if __name__== "__main__":
    generate_netflow(IPV4_SRC_ADDR="10.10.10.0")

其中,IPV4_SRC_ADDR是变量,'IPV4_SRC_ADDR'是列名。

然而,我使用这段代码的结果是这样的:
"10.10.10.[118 139 117 39 127 11 228 116 15 118 132 217 41 202 99 241 168 240]" 每一列都有这个值。

我知道我在str(np.random.randint(0, 254, df.shape[0])).
我认为问题出在将数组转换为字符串时。

标签: pythonpandascsv

解决方案


我假设您想获取 IPv4 地址列表。

为此,您可以使用列表推导:

df['IPV4_SRC_ADDR'] = [IPV4_SRC_ADDR+'.' + str(x) for x in np.random.randint(0,254,df.shape[0])]

这将每个随机数作为字符串与给定的起始字符串组合在一起。


推荐阅读