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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:10:27