在 Pandas 中将小数值转换为小数

Convert fractional values to decimal in Pandas

我的数据框数据很乱。

df:
    1        2        3
--  -------  -------  -------
 0  123/100  221/100  103/50
 1  49/100   333/100  223/50
 2  153/100  81/50    229/100
 3  183/100  47/25    31/20
 4  2.23     3.2      3.04
 5  2.39     3.61     2.69

我要将小数值转为小数,转换公式为

例如:

计算是fractional value + 1

当然保留小数值。

如何在 Pandas 和 Python 中完成?

一个简单的方法是首先定义一个将应用于列中每个元素的转换函数:

def convert(s):
    if '/' in s: # is a fraction
        num, den = s.split('/')
        return 1+(int(num)/int(den))
    else:
        return float(s)

然后使用.apply函数通过这个函数运行一列的所有元素:

df['1'] = df['1'].apply(convert)

结果:

df['1']:

0    2.23
1    1.49
2    2.53
3    2.83
4    2.23
5    2.39

然后根据需要在任何其他列上重复。

如果您信任数据集中的数据,最简单的方法是使用 eval 或更好的方法,@mozway 建议,pd.eval:

>>> df.replace(r'(\d+)/(\d+)', r'1+/', regex=True).applymap(pd.eval)
      1     2     3
0  2.23  3.21  3.06
1  1.49  4.33  5.46
2  2.53  2.62  3.29
3  2.83  2.88  2.55
4  2.23  3.20  3.04
5  2.39  3.61  2.69