如何拆分DataFrame列并统一分配列:适配含/无在线状态的用户数据
解决DataFrame中Userdata列拆分位置混乱的问题
直接按<br>拆分后取索引的问题在于,两种格式的字段顺序不一致,靠位置取必然乱套。换个思路,把每个条目解析成键值对,不管有没有在线时间,都能精准提取对应字段:
具体实现步骤
- 定义一个解析函数,把单条Userdata字符串转成字典,再提取需要的字段
- 用
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
相关产品推荐
相关产品推荐

