我有一个非常尴尬的 pandas DataFrame,看起来像这样:
identifier per_1 per_2 per_3 per_4 per_5
'something' 124/127 100/100 24/39 14/20 10/10
'camel' 121/122 150/206 300/307 11/12 0/2
... ... ... ... ... ...
因此,除了第一列之外的所有内容都是“分数”,实际上是一个字符串。我更喜欢它们的十进制形式。要访问除第一列之外的所有内容,我抓取:
df.loc[:,df.columns != ('identifier')]
效果很好。如果我想将单个列转换为小数,我可以这样做:
df['per_1'] = df['per_1'].apply(lambda x: [float(n) for n in x.split('/')[0:2]])
df['per_1'] = df['per_1'].apply(lambda x: x[0] / x[1] if x[1] != 0 else np.nan)
然后我必须迭代我想要执行此操作的每一列。考虑到我实际上可以获取我想要执行此操作的每一列,这对我来说感觉不太Pythonicdf.loc[:,df.columns != ('identifier')]
。有更好的方法来解决这个问题吗?
尝试下面的代码:
df[['identifier']].join(df.filter(like='per').apply(pd.eval))
identifier per_1 per_2 per_3 per_4 per_5
0 'something' 0.976378 1 0.615385 0.7 1
1 'camel' 0.991803 0.728155 0.977199 0.916667 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)