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

如何拆分DataFrame列并统一分配列:适配含/无在线状态的用户数据

解决DataFrame中Userdata列拆分位置混乱的问题

直接按<br>拆分后取索引的问题在于,两种格式的字段顺序不一致,靠位置取必然乱套。换个思路,把每个条目解析成键值对,不管有没有在线时间,都能精准提取对应字段:

具体实现步骤

  1. 定义一个解析函数,把单条Userdata字符串转成字典,再提取需要的字段
  2. 用apply把函数应用到整个列上,再展开成新的列

代码示例

import pandas as pd

# 构造示例数据
data = {
    'Userdata': [
        'Last online: 03H 17M<br>Level: 155<br>Followers: 89<br>Grenades: 447',
        'Level: 155<br>Followers: 89<br>Grenades: 447',
        'Last online: 12H 05M<br>Level: 200<br>Followers: 150<br>Grenades: 999'
    ]
}
df = pd.DataFrame(data)

# 定义解析函数
def parse_userdata(s):
    # 按<br>拆分每个条目,遍历生成键值对字典
    kv_pairs = {}
    for item in s.split('<br>'):
        key, value = item.split(': ', 1)  # 按": "拆分,只拆一次避免值里有冒号
        kv_pairs[key.strip()] = value.strip()
    
    # 提取对应字段,没有Last online就返回空字符串
    return pd.Series([
        kv_pairs.get('Last online', ''),
        kv_pairs.get('Level', ''),
        kv_pairs.get('Followers', ''),
        kv_pairs.get('Grenades', '')
    ])

# 应用函数并生成新列
df[['LastOnline', 'Level', 'Followers', 'Grenades']] = df['Userdata'].apply(parse_userdata)

# 查看结果
print(df)

效果说明

运行后会生成4个新列:

  • LastOnline:有在线时间就显示类似03H 17M,没有就为空字符串
  • Level:固定提取等级数值(比如155)
  • Followers:固定提取粉丝数(比如89)
  • Grenades:固定提取手雷数(比如447)

这种方法不依赖字段的顺序,哪怕以后Userdata里的字段顺序变了,只要键名不变,依然能准确提取数据,比按索引拆分靠谱多了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:05:11