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

如何将Pandas DataFrame转换为1NF以减少列中唯一值数量?

处理多列逗号分隔多值问题,解决可视化困境

方法1:拆分多值列为单独行,统计频次

把逗号分隔的多个值拆分成单独的行,让每个类型独立出现,再统计每个类型的出现次数,就能直观用于可视化(比如柱状图)。

用Pandas的str.split()和explode()实现:

import pandas as pd

# 假设你的数据集存储在df中
df['restaurant_type'] = df['restaurant_type'].str.split(', ')  # 按逗号加空格拆分
df_exploded = df.explode('restaurant_type')  # 把拆分后的列表展开成多行

# 统计每个餐厅类型的出现次数
type_frequency = df_exploded['restaurant_type'].value_counts()

# 直接可视化(以柱状图为例)
type_frequency.plot(kind='bar', figsize=(12, 6), title='餐厅类型分布')

如果有多列都需要处理,可批量循环操作:

# 列出所有需要处理的多值列
target_columns = ['restaurant_type', 'cuisine_type', 'service_type']

for col in target_columns:
    # 拆分并展开列
    df[col] = df[col].str.split(', ')
    exploded_df = df.explode(col)
    # 统计频次并可视化
    col_frequency = exploded_df[col].value_counts()
    col_frequency.plot(kind='barh', title=f'{col} 分布')

方法2:One-Hot编码,生成类型二进制列

把每个独立类型转为单独的列,值为1(包含该类型)或0(不包含),适合展示多类型共存的分布,或者用于后续分析建模。

实现代码:

# 对restaurant_type列生成one-hot编码
type_onehot = df['restaurant_type'].str.get_dummies(', ')

# 合并编码列到原数据集
df_encoded = pd.concat([df, type_onehot], axis=1)

# 统计每个类型的总出现次数
type_total = type_onehot.sum()

# 可视化(横向柱状图更适合多类型展示)
type_total.plot(kind='barh', figsize=(10, 8), title='各餐厅类型总出现次数')

这两种方法都能将原本87个复合值拆解为单个独立类型,大幅降低可视化的复杂度,让你清晰展示各类别的分布情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:05:26