如何在Python中统计DataFrame每行players列的元素数量?
解决DataFrame每行玩家数量统计问题
正确实现代码
针对你的需求,有两种可靠的实现方式,同时处理缺失值问题:
方法1:基于字符串匹配统计
利用每个玩家ID都以simple开头的特征,统计每行中simple出现的次数,同时填充缺失值:
df['PlayersCount'] = df['players'].str.count('simple').fillna(0).astype(int)
方法2:分割后统计列表长度
先按逗号分割字符串得到玩家列表,再统计每行列表的长度,同样处理缺失值:
df['PlayersCount'] = df['players'].str.split(',').str.len().fillna(0).astype(int)
你的代码问题分析
第一个代码出现NaN
因为players列存在缺失值(NaN),str.count()对NaN会返回NaN,而非0。通过fillna(0)把缺失值对应的统计结果转为0,再用astype(int)转为整数类型即可解决。第二个代码得到固定值20777
tags = df2['players'].str.split(',')返回的是一个Pandas Series对象,len(tags)获取的是整个Series的总行数(即你的数据集有20777行),而非每行分割后的玩家列表长度。需要用.str.len()来提取每行列表的长度。
如何创建示例DataFrame
如果需要测试代码,可以用以下方式生成包含模拟数据的DataFrame:
import pandas as pd data = { 'players': [ 'simple5dd1bd72e209cf05624291cd,simple62d6fd3', 'simpleabc,simplexyz,simple123', None, # 模拟缺失值场景 'simple987' ] } df = pd.DataFrame(data)
内容的提问来源于stack exchange,提问作者Arkam
相关产品推荐
相关产品推荐

