对于我关于堆栈溢出的第一个问题,我希望这是一个独特/有趣的问题!你知道吗
我有技能评估的数据,目前在一个非常大的数据框架中。每一行代表一个学生,每一列包含他们在特定技能评估中的得分。总共有大约200个技能评估,每个学生只有一个分数在这些评估的一小部分(1-20分是典型的,但有些学生有更多)。你知道吗
数据帧结构示例:
id skill1 skill2 skill3 skill4 skill5 ....
1 10 50 NaN 3 NaN
2 Nan 10 2 70 NaN
3 23 NaN 45 NaN 5
我正在尝试将这些数据转换为每个学生的空格分隔字符串,格式如下,以便我们可以将其导入不同的数据存储:
skill1:10 skill2:50 skill4:3
skill2:10 skill3:2 skill4:70
(请注意,没有评估分数的技能不会添加到列表中)
我创建了一个lambda函数,将所有这些技能值与其列标签连接起来:
skillmerge = lambda row: ' '.join([str(row.index[i])+':'+str(row[i]) for i in range(0,len(row)) if row[i]!=np.nan])
当我创建一个要测试的系列(1个学生)时,lambda函数用不到一秒钟的时间创建所需格式的输出字符串。但是,当我创建一个只有2行的数据帧时(同样是出于测试目的),该函数只需要几分钟就可以完成这2行:
testing_df['combined_skills'] = testing_df.apply(skillmerge, axis=1)
鉴于我在这个数据集中有几百万学生,我正在寻找一种方法,使这个过程可靠地工作得更快。你有没有想过我可以在哪里解决这个问题?你知道吗
提前谢谢你帮我回答我的第一个问题!:D个
使用
to_json
然后修复它或者使用列表理解和
join
两者都给予
使您的解决方案有效
注意,
np.nan == np.nan
的计算结果是False
。为了测试np.nan
,使用np.isnan
或pd.isnull
或pd.notnull
。这个事实使你的解决方案落空了。我用not np.isnan
替换了它,它就工作了。你知道吗我抓住机会做我想做的事,因为我更喜欢它。你知道吗
试试这个:
相关问题 更多 >
编程相关推荐