Python遍历CSV列调用pycrypt凯撒加密报索引歧义错误,如何实现逐列加密
代码报错原因与修正方案
核心错误点
- 循环语法写法错误:原代码中
for col in df.columns[0:,] and j in leng:不符合Python语法规则。此处and会被解析为逻辑与运算符,pandas返回的Index列索引对象无法直接转换为布尔值做逻辑判断,直接触发ValueError: The truth value of a Index is ambiguous报错。其中df.columns[0:,]本身是等价于全量列索引的写法,没有逻辑问题,错在把两个独立的遍历目标用逻辑与符号拼接在for语句里。 - 列取值逻辑错误:循环内写的
df['col']是固定读取列名为"col"的列,并没有使用循环变量存储的当前列名,无法对目标列执行加密操作。 - 序号取值逻辑错误:原代码把
j=0定义在循环外部,即使循环结构修正,加密用的列序号j也始终为0,不会随遍历的列自动递增。
修正后的实现代码
import pycrypt import pandas as pd # 读取源CSV文件 df = pd.read_csv('test.csv') # 同时遍历列序号(作为加密偏移参数)与对应列名 for col_index, col_name in enumerate(df.columns): # 对当前列的所有单元格逐行执行加密 df[col_name] = df[col_name].apply( lambda cell_content: pycrypt.caesar.encrypt(cell_content, col_index) ) # 加密完成后保存结果(index=False表示不写入pandas自动生成的行号索引) df.to_csv('encrypted_test.csv', index=False)
注意:凯撒加密仅适配文本类输入,如果你的CSV中存在数值、日期类非文本列,需要先将列内容转换为字符串格式再执行加密,避免触发类型匹配错误。
内容的提问来源于stack exchange,提问作者Kalyan N
相关产品推荐
相关产品推荐

