python - 将 str 分数转换为 pandas df 中的 float

标签 python pandas

我有一个非常尴尬的 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)

然后我必须迭代我想要执行此操作的每一列。考虑到我实际上可以使用 df.loc[:,df.columns != ('identifier')] 获取我想要执行此操作的每一列,这对我来说感觉不太Pythonic 。有更好的方法来解决这个问题吗?

最佳答案

尝试下面的代码:

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

关于python - 将 str 分数转换为 pandas df 中的 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55288248/

相关文章:

python - 列表推导式 if else 每三个项目重复一次元素

python - Pandas :如何识别具有 dtype 对象但混合类型项目的列?

python - 如何调整 GLUT 窗口的大小?

python - 用opencv保存mp4

python - 如何将 Django 模型字段分解为自己的模型并保留数据?

python - Pandas 替换为默认值

python - 在 pandas groupby 之后并行化应用

python - 计算 Pandas 中一系列趋势线的斜率

python - Pandas - 编写 Parquet 并将列保留为十进制

python - 迭代 pandas Dataframe/Series 的特定列