在 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
我要将小数值转为小数,转换公式为
例如:
- 123/100 = (123/100 + 1) = 2.23
- 333/100 = (333/100 +1) = 4.33
计算是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
我的数据框数据很乱。
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
我要将小数值转为小数,转换公式为
例如:
- 123/100 = (123/100 + 1) = 2.23
- 333/100 = (333/100 +1) = 4.33
计算是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