You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中用循环生成随机字符串并存入DataFrame列(不使用append)

解决生成N个安全随机字符串并存储到DataFrame的问题

原单个字符串生成代码

原本可成功生成单个安全随机字母数字字符串的代码:

import random
import string
import secrets
num = 10 

res = ''.join(secrets.choice(string.ascii_uppercase+ string.digits) for x in range(num))
print("Secure random string is :"+ str(res))

输出示例:Secure random string is :W8W602HOMJ

错误尝试及报错

尝试生成N个字符串并存储到DataFrame时出现两种错误:

第一种写法及报错

import random
import string
import secrets
num = 10 # define the length of the string
N=10
for i in range (1,N):

    res = ''.join(secrets.choice(string.ascii_uppercase+ string.digits) for x in range(num))
    df3.append(res)
print(df3)

报错信息:

Error : append is being Deprecated use pd.concat and 'Str' cant be appended to Dataframe.

第二种写法及报错

for i in range (1,N):

    res = ''.join(secrets.choice(string.ascii_uppercase+ string.digits) for x in range(num))
    df3 = pd.concat(df3,res)
print(df3)

报错信息:

Error : FutureWarning: In a future version of pandas all arguments of concat except for the argument 'objs' will be keyword-only.

错误原因分析

  1. 第一种写法错误:
    • 已弃用的append方法仅接受DataFrame或Series类型,无法直接追加单个字符串;且未初始化df3就调用方法,会导致未定义错误。
  2. 第二种写法错误:
    • pd.concat的第一个参数objs必须是包含DataFrame/Series的可迭代对象(如列表),不能直接传入df3和字符串res;同时res不是合法的合并对象类型。

正确解决方案

方案1:先收集所有字符串到列表(推荐,效率更高)

一次性生成所有随机字符串存入列表,再转换为DataFrame,避免循环中频繁操作DataFrame:

import string
import secrets
import pandas as pd

num = 10  # 单个字符串的长度
N = 10    # 需要生成的字符串个数

# 生成N个随机字符串的列表
random_strings = [
    ''.join(secrets.choice(string.ascii_uppercase + string.digits) for _ in range(num))
    for _ in range(N)
]

# 将列表转换为DataFrame
df3 = pd.DataFrame(random_strings, columns=['random_string'])

print(df3)

方案2:循环中使用pd.concat(不推荐,效率较低)

如果必须用循环,需将每次生成的字符串转为Series,再通过pd.concat合并到DataFrame:

import string
import secrets
import pandas as pd

num = 10
N = 10

# 初始化空的DataFrame,指定列名
df3 = pd.DataFrame(columns=['random_string'])

for _ in range(N):
    res = ''.join(secrets.choice(string.ascii_uppercase + string.digits) for _ in range(num))
    # 将单个字符串转为Series,指定列名后合并
    new_row = pd.Series([res], name='random_string')
    df3 = pd.concat([df3, new_row.to_frame()], ignore_index=True)

print(df3)

内容的提问来源于stack exchange,提问作者sandeep reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 13:57:30