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

如何将非1NF的Pandas数据集转换为符合1NF的DataFrame?

多值属性转1NF格式DataFrame的解决方案

原代码存在的问题

  1. 多列索引语法错误:df['singer','language'] 应改为 df[['singer', 'language']],但核心问题是未先拆分分号分隔的字符串。
  2. 未处理多值字符串:直接使用df['singer'].values是原始字符串,无法直接用np.concatenate拆分展开。
  3. 长度计算逻辑错误:lens计算的是原始字符串长度,而非拆分后多值元素的数量,导致np.repeat无法匹配正确的行数。

修正后的代码

import pandas as pd

# 读取原始数据集
df = pd.read_csv("music.csv")

# 将分号分隔的多值列拆分为列表
df['singer'] = df['singer'].str.split(';')
df['language'] = df['language'].str.split(';')

# 同时展开多值列,确保数据关联关系正确,生成符合1NF的DataFrame
normalized_df = df.explode(['singer', 'language'], ignore_index=True)

# 可选:清除属性值前后的空格(若原始数据分号后带空格)
normalized_df['singer'] = normalized_df['singer'].str.strip()
normalized_df['language'] = normalized_df['language'].str.strip()

print(normalized_df)

代码说明

  • str.split(';'):把分号分隔的多值字符串转换为列表,为后续展开做准备。
  • explode(['singer', 'language']):将列表类型的列展开为多行,且会保证同一行的singer和language列表元素一一对应,避免数据错位。
  • ignore_index=True:重置展开后的索引,让索引连续有序。
  • str.strip():处理分号后可能存在的空格,保证属性值的整洁性(若无此场景可删除)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:10:41