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

Pandas提取DataFrame中Region对应Name时出现单字符拆分问题

问题描述

从Pandas DataFrame中提取Region列的唯一值并获取对应Name列数据时,出现异常:当某一Region仅对应一个Name时,该Name会被拆分为单个字符输出(比如linda被拆成l-i-n-d-a)。

相关代码

import pandas as pd
data = {
    'Region': ['South','West', 'North','West', 'North',  'South','West', 'North', 'East'],
    'Name': ['Tom', 'nick', 'krish', 'jack','peter','sam','jon','megan','linda']
}

df = pd.DataFrame(data)
list_region = df['Region'].unique().tolist()
for region in list_region:
    list_person = df.set_index('Region').loc[region, 'Name']
    for person in list_person:
        print(region + ' >> ' + person)

异常输出示例

North >> megan
East >> l
East >> i
East >> n
East >> d
East >> a
问题原因

当某个Region只对应一条数据时,df.set_index('Region').loc[region, 'Name']返回的不是Series类型,而是单个字符串对象。遍历字符串时,Python会默认按单个字符拆分,导致输出每个字符。

解决方案

方案1:强制返回Series类型

将region放在列表中传入loc,确保即使只有一条数据,也返回Series对象,遍历的时候就能拿到完整的Name值:

import pandas as pd
data = {
    'Region': ['South','West', 'North','West', 'North',  'South','West', 'North', 'East'],
    'Name': ['Tom', 'nick', 'krish', 'jack','peter','sam','jon','megan','linda']
}

df = pd.DataFrame(data)
list_region = df['Region'].unique().tolist()
for region in list_region:
    # 把region包装成列表,确保返回Series
    list_person = df.set_index('Region').loc[[region], 'Name']
    for person in list_person:
        print(region + ' >> ' + person)

方案2:用groupby分组处理(更简洁)

直接按Region分组,获取每个组的Name列表,从根源避免类型问题:

import pandas as pd
data = {
    'Region': ['South','West', 'North','West', 'North',  'South','West', 'North', 'East'],
    'Name': ['Tom', 'nick', 'krish', 'jack','peter','sam','jon','megan','linda']
}

df = pd.DataFrame(data)
# 按Region分组,提取每组的Name列表
grouped = df.groupby('Region')['Name'].apply(list)
for region, names in grouped.items():
    for name in names:
        print(f"{region} >> {name}")

方案3:判断返回值类型

如果要保留原逻辑,可通过判断list_person的类型,单独处理字符串情况:

import pandas as pd
data = {
    'Region': ['South','West', 'North','West', 'North',  'South','West', 'North', 'East'],
    'Name': ['Tom', 'nick', 'krish', 'jack','peter','sam','jon','megan','linda']
}

df = pd.DataFrame(data)
list_region = df['Region'].unique().tolist()
for region in list_region:
    list_person = df.set_index('Region').loc[region, 'Name']
    # 若为字符串则直接输出,否则遍历Series
    if isinstance(list_person, str):
        print(region + ' >> ' + list_person)
    else:
        for person in list_person:
            print(region + ' >> ' + person)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:30:44