如何用Pandas根据字符串键值对创建指定硬编码新列?
解决方案:将字符串键值对映射到硬编码列
完全可以实现需求,以下是具体步骤和代码:
1. 导入依赖并处理原始数据
首先需要将DataFrame中字符串格式的key和val列解析为实际的列表,这里使用ast.literal_eval(比eval更安全,避免执行恶意代码):
import pandas as pd import ast # 原始数据初始化 tags = '1a','2b','3c','4d' keys = "['os','dist','rel','flag']", \ "['os','dist']", \ "['os','dist','rel']", \ "['os','version','rel','flag']" vals = "['linux','centos','9','y']", \ "['linux','ubuntu']", \ "['linux','rhel','8']", \ "['linux','8','.03','y']" df = pd.DataFrame({'tag': tags,'key': keys,'val': vals}) # 解析字符串列表为Python列表 df['key'] = df['key'].apply(ast.literal_eval) df['val'] = df['val'].apply(ast.literal_eval)
2. 映射键值对到硬编码列
定义需要的目标列(硬编码,符合SQL存储要求),然后将每行的key和val配对成字典,转换为对应列的行数据:
# 硬编码目标列名,包含所有可能出现的键 target_cols = ['os', 'dist', 'rel', 'flag', 'version'] # 生成结果DataFrame result_df = df.apply( lambda row: pd.Series(dict(zip(row['key'], row['val'])), index=target_cols), axis=1 )
3. 查看结果
执行后result_df的输出与你的期望一致:
os dist rel flag version 0 linux centos 9 y NaN 1 linux ubuntu NaN NaN NaN 2 linux rhel 8 NaN NaN 3 linux NaN .03 y 8
关键说明
- 硬编码列名确保结构固定,完全适配SQL数据库的存储需求;
- 自动为每行缺失的键填充
NaN,对应SQL中的NULL逻辑; ast.literal_eval安全解析字符串格式的列表,避免潜在代码执行风险。
内容的提问来源于stack exchange,提问作者CLT00
相关产品推荐
相关产品推荐

