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

如何使用仅接受字符串输入的decrypt函数处理DataFrame加密列生成新表?

嘿,我来帮你搞定这个DataFrame解密的问题!针对你的需求,我给你两种实现方式,一种是pandas推荐的高效方法,另一种是你提到的循环处理方式,按需选择就行~

方法一:用apply高效处理(推荐)

比起手动循环,pandas的Series.apply()更简洁高效,刚好适配你的Decrypt函数(只接受单个字符串输入)。直接对idencrypted列的每个元素调用解密函数就行:

代码示例:

import pandas as pd

# 先假设你的原始DataFrame长这样
df = pd.DataFrame({
    'idencrypted': ['加密串1', '加密串2', '加密串3'],
    'num': [123, 456, 789]
})

# 提前定义好你的密钥和初始向量
key1 = '你的密钥字符串'
iv = '你的初始向量字符串'

# 方式1:生成全新的DataFrame(保留原数据)
decrypted_df = df.assign(
    id=df['idencrypted'].apply(lambda x: Decrypt(x, key1, iv))
)[['id', 'num']]  # 按需要的列顺序输出

# 方式2:直接替换原DataFrame的加密列(不需要保留加密数据时用)
df['id'] = df['idencrypted'].apply(lambda x: Decrypt(x, key1, iv))
df.drop('idencrypted', axis=1, inplace=True)  # 删除原加密列
方法二:手动循环处理(满足你的循环需求)

如果你一定要用循环逐行处理,也可以这么写,虽然效率不如apply,但逻辑更直观:

代码示例:

# 初始化空列表存解密后的ID
decrypted_ids = []

# 遍历每一行的加密ID
for encrypted_id in df['idencrypted']:
    # 确保输入是字符串(避免函数报错),然后调用解密函数
    decrypted_id = Decrypt(str(encrypted_id), key1, iv)
    decrypted_ids.append(decrypted_id)

# 生成新的DataFrame
decrypted_df = pd.DataFrame({
    'id': decrypted_ids,
    'num': df['num'].tolist()
})

# 或者直接修改原DataFrame
df['id'] = decrypted_ids
df.drop('idencrypted', axis=1, inplace=True)
额外注意事项
  • 一定要确保idencrypted列的元素都是字符串!如果有非字符串类型(比如NaN、数字),记得用str()转换后再传入Decrypt函数,避免报错。
  • 如果解密过程可能出现异常(比如加密格式错误),可以加个安全处理函数,防止程序崩溃:
def safe_decrypt(encrypted_str):
    try:
        return Decrypt(str(encrypted_str), key1, iv)
    except Exception as e:
        print(f"解密出错:{e}")
        return None  # 或者返回你想要的默认值

# 然后用这个安全函数替代直接调用Decrypt
df['id'] = df['idencrypted'].apply(safe_decrypt)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:51:19